ODBC总结
2024-08-23 02:59:58
引用头文件:sql.h、sqlext.h、sqltypes.h
添加库文件:odbc32.lib odbccp32.lib
1.定义环境变量:
SQLHENV henv =nullptr;//环境句柄
SQLHDBC hdbc = nullptr; //链接句柄
SQLHSTMT hstmt = nullptr;//语句句柄
SQLRETURN result; //返回值
SQLCHAR ConnStrIn[MAXBUFLEN] = "DRIVER={MySQL ODBC 5.1 Driver};SERVER=127.0.0.1;UID=root;PWD=root;DATABASE=rupeng;CharSet=gbk;";
SQLCHAR ConnStrOut[MAXBUFLEN];
由Driver Manager 进行控制,配置环境属性,保存配置好的数据源名称,ODBC版本号,用户IP,用户ID,密码等
2.初始化环境:
//分配环境句柄
result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
//设置管理环境属性
result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, );
应用程序调用SQLAllocHandle分配链接句柄,通过SQLConnect或SQLBrowseConnect与数据链接
SQLConnect/SQLBrowseConnect链接函数,输入参数为:
配置好的数据源名称
ODBC版本号
用户IP
用户ID
密码等
3.链接:
//分配连接句柄
result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
//设置连接属性
result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (void*)LOGIN_TIMEOUT, );
//连接数据库
result = SQLDriverConnect(hdbc,NULL,
ConnStrIn,SQL_NTS,
ConnStrOut,MAXBUFLEN,
(SQLSMALLINT*),SQL_DRIVER_NOPROMPT);
if(SQL_ERROR==result)
{
ShowDBConnError(hwnd,hdbc);
return;
}
处理任何SQL语句之前,应用程序还需要首先分配一个语句句柄
语句句柄含有具体的SQL语句以及输出的结果等信息
应用程序还可以通过SQLtStmtAttr来设置语句属性(也可以使用默认值)
4.数据,执行SQL语句:
result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
result = SQLPrepare(hstmt,(SQLCHAR*)"select FName,FNumber from rupeng1",SQL_NTS);
CHECKDBSTMTERROR(hwnd,result,hstmt);
result =SQLExecute(hstmt);
CHECKDBSTMTERROR(hwnd,result,hstmt); SQLINTEGER cbsatid=SQL_NTS;
应用程序处理SQL语句的两种方式:
预处理(SQLPrepare,SQLExecute适用于语句的多次执行)
直接执行(SQLExecdirect)
如果SQL语句含有参数,应用程序为每个参数调用SQLBindParameter,并把他们绑定至应用程序变量
应用程序可以直接通过改变应用程序缓冲区的内容从而在程序中动态的改变SQL语句的执行
应用程序根据语句的类型进行的处理
有结果集的语句(select或是编目函数),则进行结果集处理。
没有结果集的函数,可以直接利用本语句句柄继续执行新的语句或是获取行计数(本次执行所影响的行数)之后继续执行。
在插入数据时,采用了预编译的方式,首先通过SQLPrepare来预处理SQL语句,将每一列绑定到用户缓冲区。
应用程序可以直接修改结果集缓冲区的内容
5.处理:
while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND) //逐行读取
{
SQLINTEGER i;
SQLGetData(hstmt,,SQL_C_LONG,&i,sizeof(i),&cbsatid);
TCHAR s[];
wsprintf(s,TEXT("年龄是:%d"),i); TCHAR name[];
SQLGetData(hstmt,,SQL_C_CHAR,name,sizeof(name)/sizeof(SQLCHAR),&cbsatid);
MessageBox(hwnd,name,TEXT(""),MB_OK);
6.处理:
SQLFreeStmt(hstmt,SQL_CLOSE);
SQLDisconnect(hdbc);
SQLFreeHandle(SQL_HANDLE_DBC,hdbc);
SQLFreeHandle(SQL_HANDLE_ENV,henv);
MessageBox(hwnd,TEXT("执行成功"),TEXT("标题"),MB_OK);
}
最新文章
- ThinkPHP项目整合UCenter(一)
- Eclipse-修改工程名
- Chrome浏览器的Timing分析
- 2014多校第六场 1005 || HDU 4925 Apple Tree
- 对于REST中无状态(stateless)的一点认识
- Java基础中的一些注意点(续)
- TatukGIS - GisDefs - CanonicalSQLName 函数
- silverlight visifire控件图表制作——silverlight 静态页面xaml
- JAVA面试之集合框架(三)
- JavaScript构造函数
- OO第二单元总结(多线程的电梯调度)
- 免费API接口
- EditPlus5.0注册码
- Rx.NET响应式编程
- MySQL中一个sql语句包含in优化问题
- c++ 二叉树的遍历
- 在虚拟机(vmware)上安装CentOS
- [Makefile]多文件的通用Makefile
- Python开发【十八章】:Web框架
- C语言 结构体传值与传址分析
热门文章
- Docker Network Configuration 高级网络配置
- Pocket英语语法---一、形容词性物主代词和名词性物主代词
- vue --- 脚手架初始化项目中配置文件webpack.base.conf.js代码含义
- Python(六) Python 函数
- SQL函数_Floor和Celling
- Chromium Graphics : GPU Accelerated Compositing in Chrome
- vue+ webpack中的animate.css实现的执行多个连续的动画
- 进阶《Python高性能编程》中文PDF+英文PDF+源代码
- 使用acme.sh快速生成SSL证书
- OpenStack_Swift源代码分析——Object-auditor源代码分析(2)