ODBCWord文档格式.doc
- 文档编号:3979099
- 上传时间:2023-05-02
- 格式:DOC
- 页数:10
- 大小:222KB
ODBCWord文档格式.doc
《ODBCWord文档格式.doc》由会员分享,可在线阅读,更多相关《ODBCWord文档格式.doc(10页珍藏版)》请在冰点文库上搜索。
通过ODBC访问数据库
姓名
王朔
日期
2014/4/24
实验环境:
操作系统:
Windows7;
数据库管理系统:
SQLServer2008
实验内容与完成情况:
一、配置数据源(运用数据源管理工具来进行配置。
)
实验中需要同时用到KingbaseES和SQLServer,因此需要分别建立两个数据源,我们将其取名为KingbaseESODBC和SQLServer。
下面是建立这两个数据源的具体步骤。
选择『开始』│『设置』│『控制面板』菜单,在弹出窗口中双击“管理工具”图标进
入管理工具界面,双击“数据源(ODBC)”图标。
1.建立KingbaseES数据源。
(1)选择“系统DSN”选项,单击【添加(D)…】按钮,系统弹出“创建新数据源”
对话框,如图1所示:
图1数据源管理器
(2)如图2所示,在ODBC驱动器程序列表中,选择“KingbaseODBCDriver”,单
击【完成】按钮,系统弹出“KingbaseODBC数据源配置”对话框,如图3所示。
图2创建新数据源
(3)输入数据源名称、数据库名称以及数据库IP地址。
图中数据源的名称为
KingbaseESODBC,连接的数据库为“学生课程数据库”,服务器为localhost,用
户名和口令分别为SYSTEM和MANAGER。
注意:
KingbaseES区别大小写。
图3KingbaseODBC数据源配置
(4)单击【保存】按钮,这样就创建了一个名为“KingbaseESODBC”的KingbaseES
ODBC数据源。
(5)如果要测试和数据源的连接是否成功,可以单击“测试连接”,系统会根据测试
的结果反馈相应的消息框,如图4和图5所示。
图4连接成功图5连接失败
以上五步就建立了一个名为KingbaseESODBC的数据源
2.建立SQLServer数据源。
对话框,如图6所示:
图6数据源管理器
(2)如图7所示,在ODBC驱动器程序列表中,选择“SQLServer”,单击【完成】
按钮,系统弹出“CreateNewDataSourcetoSQLServer”对话框,如图8所示。
图7创建数据源配置
(3)如图8,输入数据源名称和服务器,单击【下一步】按钮。
图中数据源的名称
为SQLServer,服务器为(local)。
如图9,选择身份认证方式,输入用户名和密码,
用户名和口令分别为sa和sa(请根据实际情况进行修改,并对源代码进行相应的
修改)。
图8SQLServer数据源配置
(1)
图9SQLServer数据源配置
(2)
(4)连续单击【下一步】按钮,这样就创建了一个名为“SQLServer”的SQLServer
如图10所示,将弹出一个提示框,提示即将创建一个新的ODBC
数据源。
图10提示框
(5)如果要测试和数据源的连接是否成功,可以单击“TestDataSource”,如果连接
成功,系统将会显示一个连接成功的消息框,如图11所示。
图11连接成功
以上五步就建立了一个名为SQLServer的数据源。
注:
在创建数据源,测试连接是否成功时,如果KingbaseES和SQLServer未启动服务,
则将显示连接失败。
启动服务后,再进行测试,连接成功。
二.通过ODBC访问异构数据库,并且对异构数据库进行操作。
(1)我们还需要在SQLServer中预先建立基本表STUDENT。
在本实验中,我们将编写程序连接两个不同RDBMS的数据源,将KingbaseES数据库中的STUDENT表中的数据备份到SQLServer数据库的STUDENT中。
(2)在VC++6.0环境中编程实现访问数据库。
本实验源程序名为ODBCTest。
下面我们将在VC++6.0环境下对该程序进行编译。
实验源代码:
#include<
stdlib.h>
stdio.h>
windows.h>
sql.h>
sqlext.h>
sqltypes.h>
#defineSNO_LEN30
#defineNAME_LEN50
#defineDEPART_LEN100
#defineSSEX_LEN5
intmain()
{
/*Step1定义句柄和变量*/
//以king开头的表示的是连接KINGBASEES的变量
//以server开头的表示的是连接SQLSERVER的变量
SQLHENV
kinghenv,serverhenv;
//环境句柄
SQLHDBC
kinghdbc,serverhdbc;
//连接句柄
SQLHSTMT
kinghstmt,serverhstmt;
//语句句柄
SQLRETURN
ret;
//结果返回集
SQLCHAR
sName[NAME_LEN],sDepart[DEPART_LEN],sSex[SSEX_LEN],
sSno[SNO_LEN];
SQLINTEGER
sAge;
cbAge=0,cbSno=SQL_NTS,cbSex=SQL_NTS,
cbName=SQL_NTS,cbDepart=SQL_NTS;
/*Step2初始化环境*/
//分配环境句柄
ret=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&
kinghenv);
serverhenv);
//设置管理环境的属性
ret=SQLSetEnvAttr(kinghenv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0);
ret=SQLSetEnvAttr(serverhenv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0);
/*Step3:
建立连接*/
//分配连接句柄
ret=SQLAllocHandle(SQL_HANDLE_DBC,kinghenv,&
kinghdbc);
ret=SQLAllocHandle(SQL_HANDLE_DBC,serverhenv,&
serverhdbc);
ret=SQLConnect(kinghdbc,
//连接KingbaseES
"
KingbaseESODBC"
SQL_NTS,
SYSTEM"
MANAGER"
SQL_NTS);
if(!
SQL_SUCCEEDED(ret))
//连接失败时返回错误值
return-1;
ret=SQLConnect(serverhdbc,
//连接SQLServer
SQLServer"
sa"
/*Step4:
初始化语句句柄*/
ret=SQLAllocHandle(SQL_HANDLE_STMT,kinghdbc,&
kinghstmt);
ret=SQLSetStmtAttr(kinghstmt,SQL_ATTR_ROW_BIND_TYPE,(SQLPOINTER)SQL_BI
ND_BY_COLUMN,SQL_IS_INTEGER);
//设置语句选项
ret=SQLAllocHandle(SQL_HANDLE_STMT,serverhdbc,&
serverhstmt);
/*Step5:
两种方式执行语句*/
/*预编译带有参数的语句*/
//需要多次执行插入,因此预先声明插入语句
ret=SQLPrepare(serverhstmt,"
INSERTINTOSTUDENT
(SNO,SNAME,SSEX,SAGE,SDEPT)VALUES(?
?
)"
SQL_NTS);
if(ret==SQL_SUCCESS||ret==SQL_SUCCESS_WITH_INFO)
//绑定参数
ret
=
SQLBindParameter(serverhstmt,
1,
SQL_PARAM_INPUT,
SQL_C_CHAR,SQL_CHAR,SNO_LEN,0,sSno,0,&
cbSno);
2,
SQL_C_CHAR,SQL_CHAR,NAME_LEN,0,sName,0,&
cbName);
3,
SQL_C_CHAR,SQL_CHAR,2,0,sSex,0,&
cbSex);
4,
SQL_C_LONG,SQL_INTEGER,0,0,&
sAge,0,&
cbAge);
5,
SQL_C_CHAR,SQL_CHAR,DEPART_LEN,0,sDepart,0,&
cbDepart);
}
/*执行SQL语句*/
ret=SQLExecDirect(kinghstmt,"
SELECT*FROMSTUDENT"
//将结果集中的属性列一一绑定至变量
ret=SQLBindCol(kinghstmt,1,SQL_C_CHAR,sSno,SNO_LEN,&
ret=SQLBindCol(kinghstmt,2,SQL_C_CHAR,sName,NAME_LEN,&
ret=SQLBindCol(kinghstmt,3,SQL_C_CHAR,sSex,SSEX_LEN,&
ret=SQLBindCol(kinghstmt,4,SQL_C_LONG,&
ret=SQLBindCol(kinghstmt,5,SQL_C_CHAR,sDepart,DEPART_LEN,&
/*Step6:
处理结果集并执行预编译后的语句*/
while((ret=SQLFetch(kinghstmt))!
=SQL_NO_DATA_FOUND)
if(ret==SQL_ERROR)
//错误处理
printf("
Fetcherror\n"
);
elseret=SQLExecute(serverhstmt);
//执行语句
/*Step7中止处理*/
SQLFreeHandle(SQL_HANDLE_STMT,kinghstmt);
//释放Kingbase语句句柄
SQLDisconnect(kinghdbc);
//断开与KingbaseES的连接
SQLFreeHandle(SQL_HANDLE_DBC,kinghdbc);
//释放Kingbase连接句柄
SQLFreeHandle(SQL_HANDLE_ENV,kinghenv);
//释放Kingbase环境句柄
SQLFreeHandle(SQL_HANDLE_STMT,serverhstmt);
//释放SQLServer语句句柄
SQLDisconnect(serverhdbc);
//断开与SQLServer的连接
SQLFreeHandle(SQL_HANDLE_DBC,serverhdbc);
//释放SQLServer连接句柄
SQLFreeHandle(SQL_HANDLE_ENV,serverhenv);
//释放SQLServer环境句柄
return0;
(3)实验步骤。
首先,在VC++6.0中新建一个Win32ConsoleApplication的项目,并将项目命名为
ODBCTest。
然后,将已经写好的ODBCTest.c文件加入到该项目的SourceFiles中,编译并且执行。
执行完成后,进入SQLServer查询分析器,对原来为空的Student表进行查询(SELECT
*FROMStudent),可以看见SQLServer中Student表的数据即为KingbaseES中Student表的数据备份。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ODBC
![提示](https://static.bingdoc.com/images/bang_tan.gif)