C++使用ODBC连接数据库遇到的问题
2024-08-28 09:51:55
C++使用ODBC连接数据库遇到的问题
1、SQL语句中包含中文无法正常执行的问题
例如:
SQLCHAR S[512]="INSERT INTO Test.dbo.DATA(name,sex,IDCard) VALUES ('张三','男','012345678912345678');";
此时执行SQLExecDirect
进行数据库数据插入时可能会失败,返回值为-1。这是由于中文占用两个字节引发的错误,所以在这里,我们要使用宽字符和SQLExecDirectW
函数进行插入
SQLWCHAR SS[512] = L"INSERT INTO Test.dbo.DATA(name,sex,IDCard) VALUES ('张三','男','012345678912345678');";
SQLRETURN ret = SQLExecDirectW(this->hstmt, SS, SQL_NTS);
2、字符与宽字符相互转化的问题
上文提到,当SQL包含中文时需要使用宽字符才能执行,所以还涉及到一个宽字符拼接的问题
MultiByteToWideChar函数详解
//将char转化为wchar
wchar_t *Char2Wchar(const char *szStr) {
//第一个参数为字符集,根据自己的设置进行更改
int nLen = MultiByteToWideChar(CP_UTF8, MB_PRECOMPOSED, szStr, -1, NULL, 0);
if (nLen == 0) {
return nullptr;
}
auto *pResult = new wchar_t[nLen];
MultiByteToWideChar(CP_UTF8, MB_PRECOMPOSED, szStr, -1, pResult, nLen);
return pResult;
}
SQLWCHAR SQL[512];
//宽字符串拼接函数,与普通拼接用法一致
wsprintfW(SQL, L"INSERT INTO Test.dbo.DATA(name,sex,IDCard) VALUES ('%s','%s','%s');", L"张三", L"男",L"012345678912345678");
//效果与上述一样
SQLWCHAR *buf=Char2Wchar("张三");
wsprintfW(SQL, L"INSERT INTO Test.dbo.DATA(name,sex,IDCard) VALUES ('%s','%s','%s');", bufs, L"男",L"012345678912345678");
最新文章
- 【原创】如何确定Kafka的分区数、key和consumer线程数
- JDBC——Java代码与数据库链接的桥梁
- python 生成 xml文件 属性的顺序问题
- windows 程序的本体与操作系统之间的关系
- corresponding SQLSTATE values general error
- LNK1104:无法打开文件'mfc90.lib“
- 树-哈夫曼树(Huffman Tree)
- html5本地存储web storage的简单使用
- HostOnly模式下的Centos克隆虚拟机+配置固定ip
- jq的事件对象的属性
- android studio导入矢量svg图标技巧
- swift 3.0 基础练习 面向对象 类
- library 显示所有的数据
- elasticsearch搜索框架的安装相关
- shiro三连斩之第一斩
- CodeCraft-19 and Codeforces Round #537 (Div. 2) 题解
- c# Array、ArrayList、List
- history.go(-1)和History.back()的区别
- 【redis专题(2)】命令语法介绍之string
- Android设置常见控件点击效果
热门文章
- 【gRPC】C++异步服务端优化版,多服务接口样例
- 【项目实战】CNN手写识别复杂模型的构造
- ProxySQL(1):简介和安装
- 使用docker-compose.yml安装rabbitmq集群
- Linux yum安装PostgreSQL9.6
- 关于AWS-EC2或者多个资源的tag的批量添加-基于Resource Groups &; Tag Editor 和 命令处理
- win7升级到win10系统后,node13升级为node16,node版本node-sass版本与不匹配,导致出现npm ERR! ERESOLVE could not resolve
- Typora设置代码块Mac风格三个圆点
- 使用request对象进行简单的注册以及信息显示
- .NET Core C#系列之XiaoFeng.Data.IQueryableX ORM框架