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

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介:

 以读写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
相关文章
|
6月前
|
SQL 存储 API
Flink实践:通过Flink SQL进行SFTP文件的读写操作
虽然 Apache Flink 与 SFTP 之间的直接交互存在一定的限制,但通过一些创造性的方法和技术,我们仍然可以有效地实现对 SFTP 文件的读写操作。这既展现了 Flink 在处理复杂数据场景中的强大能力,也体现了软件工程中常见的问题解决思路——即通过现有工具和一定的间接方法来克服技术障碍。通过这种方式,Flink SQL 成为了处理各种数据源,包括 SFTP 文件,在内的强大工具。
258 15
|
5月前
|
SQL Java 数据库连接
mybatis使用四:dao接口参数与mapper 接口中SQL的对应和对应方式的总结,MyBatis的parameterType传入参数类型
这篇文章是关于MyBatis中DAO接口参数与Mapper接口中SQL的对应关系,以及如何使用parameterType传入参数类型的详细总结。
113 10
|
5月前
|
SQL 存储 关系型数据库
SQL判断CHAR类型字段不为空的方法与技巧
在SQL查询中,判断一个CHAR类型字段是否不为空是一个常见的需求
|
6月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
7月前
|
SQL 数据处理 数据库
SQL中的函数有哪些类型
【8月更文挑战第20天】SQL中的函数有哪些类型
84 1
|
7月前
|
SQL 存储 数据库
SQL Server 中的备份类型详解
【8月更文挑战第31天】
195 0
|
7月前
|
SQL 存储 数据库
|
7月前
|
SQL 关系型数据库 数据处理
|
7月前
|
SQL 存储 数据库
SQL中的不同关系类型:深入解析
【8月更文挑战第31天】
137 0
|
7月前
|
SQL 存储 NoSQL
从SQL到NoSQL:理解不同数据库类型的选择与应用——深入比较数据模型、扩展性、查询语言、一致性和适用场景,为数据存储提供全面决策指南
【8月更文挑战第31天】在信息技术飞速发展的今天,数据库的选择至关重要。传统的SQL数据库因其稳定的事务性和强大的查询能力被广泛应用,而NoSQL数据库则凭借其灵活性和水平扩展性受到关注。本文对比了两种数据库类型的特点,帮助开发者根据应用场景做出合理选择。SQL数据库遵循关系模型,适合处理结构化数据和复杂查询;NoSQL数据库支持多种数据模型,适用于非结构化或半结构化数据。SQL数据库在一致性方面表现优异,但扩展性较差;NoSQL数据库则设计之初便考虑了水平扩展性。SQL使用成熟的SQL语言,NoSQL的查询语言更为灵活。
155 0

热门文章

最新文章