当前位置: 首页 > news >正文

创建ODBC数据源SQLConfigDataSource函数的用法

网络上没有这个函数能实际落地的用法说明,我实践后整理一下:

1.头文件与额外依赖库:

#include <odbcinst.h>
#pragma comment(lib, "legacy_stdio_definitions.lib")

2.调用函数:

if (!SQLConfigDataSourceW(NULL, ODBC_ADD_DSN, L"驱动", "以\0为间隔的参数字符串\0\0"))
{DWORD err = GetLastError();AfxMessageBox(_T("Can't add DSN!"));return;
}

 这里最不容易确定的是“驱动”和“参数字符串”这两个参数,经过实践,我找到一种十分简单的方法:

3.运行“C:\Windows\System32\odbcad32.exe”(64位),“C:\Windows\SysWOW64\odbcad32.exe”(32位),切换到“文件DSN”页签

4. 点击“添加(D)...”按钮,在弹出的对话框中选择驱动,下一步:

5. 指定DSN文件保存到的位置,点击“下一步”,点击“完成”

 

6.在弹出的窗口中选择关联的数据库文件,这里选择一个access数据库,点击两个窗口的“确定”按钮即可完成文件DSN的创建。

7. 找到刚才保存到的DSN文件,使用记事本打开,其中这里的文本就是SQLConfigDataSource的参数字符串:

 8.接下来就是把这个文本转为SQLConfigDataSource的参数:

        a.把文本中的“\”转为“\\”

        b.添加一项配置指定DSN名字:DSN=MyDSN

        c.在每个配置后面加一个“\0”

        d.在字符串的最后再多加一个“\0”表示结束

最后得到代码:

	if (!SQLConfigDataSourceW(NULL, ODBC_ADD_DSN, L"Microsoft Access Driver (*.mdb, *.accdb)",L"DSN=MyDSN\0" //添加一项配置指定DSN名字:DSN=MyDSNL"DRIVER=Microsoft Access Driver (*.mdb, *.accdb)\0"L"UID=\0"L"UserCommitSync=Yes\0"L"Threads=3\0"L"SafeTransactions=0\0"L"PageTimeout=5\0"L"MaxScanRows=8\0"L"MaxBufferSize=2048\0"L"FIL=MS Access\0"L"DriverId=25\0"L"DefaultDir=E:\\\0" //把文本中的“\”转为“\\”L"DBQ=E:\\Database1.mdb\0""\0")) //在字符串的最后再多加一个“\0”表示结束{DWORD err = GetLastError();AfxMessageBox(_T("Can't add DSN!"));return;}

☆注意事项: 

A.64位和32位的程序新建的DSN都是要分开的

B.参数字符串最后要加多一个“\0”


http://www.mrgr.cn/news/62015.html

相关文章:

  • 数据结构和算法-动态规划(2)-小试牛刀
  • 列表item中有CheckBox的勾选交互问题
  • 模具生产管理系统软件:提升制造业效率的新利器
  • The database mes could not be exclusively locked to perform the operation.
  • libavdevice.so.58: cannot open shared object file: No such file ordirectory踩坑
  • 使用Git进行团队协作开发
  • gpio子系统-通过io来控制gpio
  • 刚刚买的域名被DNS劫持了怎么处理
  • Spring 设计模式之装饰器模式
  • Unreal5从入门到精通之如何解决在VR项目在头显中卡顿的问题
  • 基于vue框架的的家政预定服务系统4k26i(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
  • 万圣节活动如何实现在线预约报名?
  • uniapp iOS打包证书过期——重新下载证书及更新文件
  • 设计模式 - 工厂方法模式
  • Shell变量与子串
  • Mac程序坞窗口预览的方法来了
  • Rust 力扣 - 59. 螺旋矩阵 II
  • 为什么美业必须要有一套专业的美业门店管理系统?美业SaaS系统收银系统拓客系统Java源码
  • Django框架实现用户认证
  • 【力扣专题栏】两两交换链表中的节点,如何实现链表中两两相邻节点的交换?
  • 在JavaScript中怎样实现闭包?
  • 5、片元着色器之基础光照模型:Phong模型和Blinn-Phong模型
  • 【Linux】进程间通信
  • iOS18 取消/适配TabbarController缩放动画
  • Vue CLI: 安装、项目创建及基本概念指南,vue生命周期
  • C++:输入和输出