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");

最新文章

  1. 【原创】如何确定Kafka的分区数、key和consumer线程数
  2. JDBC——Java代码与数据库链接的桥梁
  3. python 生成 xml文件 属性的顺序问题
  4. windows 程序的本体与操作系统之间的关系
  5. corresponding SQLSTATE values general error
  6. LNK1104:无法打开文件'mfc90.lib“
  7. 树-哈夫曼树(Huffman Tree)
  8. html5本地存储web storage的简单使用
  9. HostOnly模式下的Centos克隆虚拟机+配置固定ip
  10. jq的事件对象的属性
  11. android studio导入矢量svg图标技巧
  12. swift 3.0 基础练习 面向对象 类
  13. library 显示所有的数据
  14. elasticsearch搜索框架的安装相关
  15. shiro三连斩之第一斩
  16. CodeCraft-19 and Codeforces Round #537 (Div. 2) 题解
  17. c# Array、ArrayList、List
  18. history.go(-1)和History.back()的区别
  19. 【redis专题(2)】命令语法介绍之string
  20. Android设置常见控件点击效果

热门文章

  1. 【gRPC】C++异步服务端优化版,多服务接口样例
  2. 【项目实战】CNN手写识别复杂模型的构造
  3. ProxySQL(1):简介和安装
  4. 使用docker-compose.yml安装rabbitmq集群
  5. Linux yum安装PostgreSQL9.6
  6. 关于AWS-EC2或者多个资源的tag的批量添加-基于Resource Groups & Tag Editor 和 命令处理
  7. win7升级到win10系统后,node13升级为node16,node版本node-sass版本与不匹配,导致出现npm ERR! ERESOLVE could not resolve
  8. Typora设置代码块Mac风格三个圆点
  9. 使用request对象进行简单的注册以及信息显示
  10. .NET Core C#系列之XiaoFeng.Data.IQueryableX ORM框架