### C语言操作SQL Server 2000 的关键技术点 #### 一、连接数据库 在C语言中操作SQL Server 2000 首先需要建立与数据库的连接。根据给定的部分代码示例,我们可以看到使用了ODBC (Open Database Connectivity) API 来实现这一目标。 1. **分配环境句柄**: - 使用`SQLAllocHandle()`函数来为ODBC环境分配一个句柄。 - 如果分配失败,则通过`SQLFreeHandle()`释放已分配的环境句柄,并返回错误代码-1。 2. **设置环境属性**: - 调用`SQLSetEnvAttr()`设置ODBC版本为3。 - 如果设置失败,则释放环境句柄并返回错误代码-1。 3. **分配数据库连接句柄**: - 使用`SQLAllocHandle()`为数据库连接分配一个句柄。 - 如果分配失败,则释放数据库连接句柄和环境句柄,并返回错误代码-1。 4. **建立连接**: - 使用`SQLConnect()`函数尝试连接到指定的数据库(`mealdb`)。 - 如果连接成功,则将`Connectbl`标志设为TRUE,并返回1表示成功。 - 如果连接失败,则释放数据库连接句柄和环境句柄,并返回错误代码-1。 #### 二、断开数据库连接 在完成对数据库的操作后,通常需要断开连接以释放资源。这部分代码示例中的`DisConnectDB()`函数实现了这一功能。 1. **断开连接**: - 使用`SQLDisconnect()`断开与数据库的连接。 - 如果断开失败,则返回错误代码-1。 2. **释放连接句柄**: - 使用`SQLFreeHandle()`释放之前分配的数据库连接句柄。 - 如果释放失败,则返回错误代码-1。 3. **释放环境句柄**: - 释放最初分配的环境句柄。 - 如果释放失败,则返回错误代码-1。 4. **成功返回**: - 如果所有步骤都执行成功,则返回1表示成功。 #### 三、执行查询 在连接数据库之后,可以执行各种SQL命令,如查询、插入等。部分代码示例中的`Export_foodtype()`函数展示了如何执行一个简单的查询。 1. **分配语句句柄**: - 使用`SQLAllocHandle()`为SQL语句分配一个句柄。 2. **执行查询**: - 使用`SQLExecDirect()`或`SQLPrepare()`/`SQLExecute()`组合来执行SQL命令。 - 示例中未提供具体实现,但通常会使用这些API之一来执行查询。 3. **处理结果集**: - 查询完成后,可以通过`SQLFetch()`或`SQLFetchScroll()`获取结果集中的数据。 - 使用`SQLGetData()`获取特定列的数据。 4. **释放语句句柄**: - 完成查询后,需要使用`SQLFreeHandle()`释放语句句柄。 5. **清理资源**: - 在执行完所有操作后,应调用`DisConnectDB()`断开数据库连接并释放资源。 #### 四、总结 以上介绍的关键技术点涵盖了使用C语言操作SQL Server 2000的基本流程:连接数据库、执行查询、断开连接。需要注意的是,在实际应用中还需考虑异常处理、资源管理等细节问题。此外,由于SQL Server 2000已经较为老旧,建议在新项目中考虑使用更现代的数据库版本及对应的API。
/****************************************************************
* Function: ConnectDatabase()
* puerpose:连接数据库
* result:1:correct;-1:error;
*****************************************************************/
int ConnectDatabase()
{
Connectbl=FALSE;
/*分配资源*/
nResult= SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
if (nResult != SQL_SUCCESS && nResult != SQL_SUCCESS_WITH_INFO)
{
SQLFreeHandle(SQL_HANDLE_ENV,henv);
return(-1);
}
nResult = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
if (nResult != SQL_SUCCESS && nResult != SQL_SUCCESS_WITH_INFO)
{
SQLFreeHandle(SQL_HANDLE_ENV,henv);
return(-1);
}
nResult = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
if (nResult != SQL_SUCCESS && nResult != SQL_SUCCESS_WITH_INFO)
{
SQLFreeHandle(SQL_HANDLE_DBC,hdbc);
return(-1);
}
nResult = SQLConnect(hdbc,(SQLCHAR*) "mealdb ",SQL_NTS,(SQLCHAR*) "sa ",SQL_NTS,(SQLCHAR*) " ",SQL_NTS);
// if failed to connect, free the allocated hdbc before return
if (nResult == SQL_SUCCESS || nResult == SQL_SUCCESS_WITH_INFO)
{
Connectbl = TRUE;
return(1);
}
else
{
SQLFreeHandle(SQL_HANDLE_DBC,hdbc);
SQLFreeHandle(SQL_HANDLE_ENV,henv);
return(-1);
}
}
/****************************************************************
* Function: DisConnectDB()
* puerpose:连接数据库
RESULT: 1:correct;-1:eror
*****************************************************************/
int DisConnectDB()
/*断开连接,释放资源*/
{
// if(SQL_SUCCESS != (nResult= SQLFreeHandle(SQL_HANDLE_STMT,hstmt)))
// MessageBox(0, "errors ", "test3 ",MB_OK);
if(SQL_SUCCESS != (nResult= SQLDisconnect(hdbc)))
return(-1);
if(SQL_SUCCESS != (nResult = SQLFreeHandle(SQL_HANDLE_DBC, hdbc)))
return(-1);
剩余5页未读,继续阅读
- yudugeneral2014-01-16厄,没对啊,不完整
- 水梦伊珊2014-10-23不是很完整,但可以解决我的问题了。
- shccr2014-06-06原以为是OLEDB的呢。结果还是ODBC的。
- helloworldbbc2014-04-10看了一下,还是有点用。
- feiyuyaofacai2012-08-06呵呵,找了很久啊,还是不太会用
- 粉丝: 3
- 资源: 11
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Homebrew 国内安装脚本,快速部署 brew ,国内镜像
- 2022-2006外出务工、耕地面积等数据,中国农村经营管理统计年报-最新出炉.zip
- 消息推送平台,推送下发邮件短信【微信服务号】【微信小程序】企业微信钉钉等消息类型
- 嵌入式系统开发中的高性能微控制器数据手册解析-6011A
- 一个基于 vue、datav、Echart 框架的大数据可视化(大屏展示)模板,提供数据动态刷新渲染、屏幕适应、内部图表自由替换、Mixins注入等功能
- 各种活动广告酷炫好看的海报PSD源文件4(30个)
- cocos creator 3.8 用贴图创建材质
- 2005-2021年全国各省家庭承包耕地面积和流转总面积数据-最新出炉.xlsx.zip
- 一个由Java实现的游戏服务器端框架,可快速开发出易维护、高性能、高扩展能力的游戏服务器
- 生涯发展报告_编辑.pdf