读写SQL Server的binary类型(VC/MFC)

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介:

 以读写32位的IP地址为例。表的设计视图如下:

wKioL1NPc1WB421aAAAOJrGl0DU369.png

  示例代码如下,其中CMSSADO为walker简单封装的类,不必关心,重点在代码中标注关键代码部分。为了减少代码,突出重点,代码中没有加入异常处理。walker的编译环境为win7 x64下vs2010,数据库为sql server 2008 R2。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
//初始化ADO环境
AfxOleInit();
CMSSADO mss_ado;
CString str;
CString conn_str = _T( "Provider=SQLOLEDB;" );
conn_str += _T( "SERVER=127.0.0.1;" );
conn_str += _T( "DATABASE=walker_test;" );
conn_str += _T( "UID=sa;" );
conn_str += _T( "PWD=xxxxxxx;" );
mss_ado.OpenConnection(conn_str);
ADODB::_ConnectionPtr conn = mss_ado.GetConnectionPtr();
CString sql = _T( "INSERT INTO IPTbl(UserIP) VALUES(0x11223344)" );    //插入
conn->Execute((_bstr_t)sql, NULL, ADODB::adCmdText);
sql = _T( "SELECT TOP 1 [UserID], [UserIP] FROM IPTbl" );  //读取
ADODB::_RecordsetPtr rs = NULL;
mss_ado.OpenRecordset(sql);
rs = mss_ado.GetRecordsetPtr();
CString UserID = _T( "" ),
         UserIP = _T( "" );
if  (!rs->adoEOF)
{
     _variant_t vUserID = rs->GetCollect( "UserID" );
     _variant_t vUserIP = rs->GetCollect( "UserIP" );
     UserID = ( TCHAR *)(_bstr_t)(vUserID);
     ///// begin 关键代码 /////
     char  *pBuf = NULL;
     char  bytmp[4];
     memset (bytmp, 0,  sizeof (bytmp));
     SafeArrayAccessData(vUserIP.parray, ( void  **)&pBuf);
     if  (pBuf != NULL)
     {
         memcpy (bytmp, pBuf,  sizeof (bytmp));
     }
     SafeArrayUnaccessData (vUserIP.parray);
                         
     wchar_t  wc;
     CString s;
     for ( int  i=0; i<4; i++)
     {
         //因为是unicode环境,需要转换char为wchar_t
         mbtowc (&wc, ( char  *)&bytmp[i], MB_LEN_MAX);
         s.Format(_T( "%X" ), wc);
         UserIP += s;
     }
     ///// end 关键代码 /////
     AfxMessageBox(_T( "UserIP: " ) + UserIP);
}
sql = _T( "UPDATE IPTbl SET UserIP=0x" ) + UserIP + _T( " WHERE UserID=" ) + UserID;     //修改
conn->Execute((_bstr_t)sql, NULL, ADODB::adCmdText);
//关闭ado环境
AfxOleTerm();
AfxMessageBox(_T( "OK" ));


*** walker ***

本文转自walker snapshot博客51CTO博客,原文链接http://blog.51cto.com/walkerqt/1397171如需转载请自行联系原作者

RQSLT
相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
相关文章
|
7天前
|
SQL 人工智能 算法
【SQL server】玩转SQL server数据库:第二章 关系数据库
【SQL server】玩转SQL server数据库:第二章 关系数据库
44 10
|
1月前
|
SQL 数据库 数据安全/隐私保护
Sql Server数据库Sa密码如何修改
Sql Server数据库Sa密码如何修改
|
17天前
|
SQL
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
15 0
|
7天前
|
SQL 算法 数据库
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
61 6
|
7天前
|
SQL 存储 数据挖掘
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
服务器数据恢复环境: 一台安装windows server操作系统的服务器。一组由8块硬盘组建的RAID5,划分LUN供这台服务器使用。 在windows服务器内装有SqlServer数据库。存储空间LUN划分了两个逻辑分区。 服务器故障&初检: 由于未知原因,Sql Server数据库文件丢失,丢失数据涉及到3个库,表的数量有3000左右。数据库文件丢失原因还没有查清楚,也不能确定数据存储位置。 数据库文件丢失后服务器仍处于开机状态,所幸没有大量数据写入。 将raid5中所有磁盘编号后取出,经过硬件工程师检测,没有发现明显的硬件故障。以只读方式将所有磁盘进行扇区级的全盘镜像,镜像完成后将所
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
|
11天前
|
SQL 安全 Java
SQL server 2017安装教程
SQL server 2017安装教程
14 1
|
24天前
|
SQL 存储 Python
Microsoft SQL Server 编写汉字转拼音函数
Microsoft SQL Server 编写汉字转拼音函数
|
1月前
|
SQL 存储 数据库
数据安全无忧,SQL Server 2014数据库定时备份解密
数据安全无忧,SQL Server 2014数据库定时备份解密
|
1月前
|
SQL 网络协议 Windows
破解SQL Server迷局,彻底解决“管道的另一端无任何进程错误233”
破解SQL Server迷局,彻底解决“管道的另一端无任何进程错误233”
|
1月前
|
SQL 数据库 数据安全/隐私保护
SQL Server的安装步骤_kaic
SQL Server的安装步骤_kaic