数据库odbc.docx
- 文档编号:4982912
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:11
- 大小:941.72KB
数据库odbc.docx
《数据库odbc.docx》由会员分享,可在线阅读,更多相关《数据库odbc.docx(11页珍藏版)》请在冰豆网上搜索。
数据库odbc
数据库原理实验报告
实验内容:
ODBC
实验内容
一、配置数据源
在本实验中,我们采用运用数据源管理工具来进行配置创建数据源。
实验中需要同时用到KingbaseES和SQL
Server,因此需要分别建立两个数据源,我们将其取名为KingbaseESODBC和SQLServer。
下面是建立这两个数据源的具体步骤。
选择『开始』│『设置』│『控制面板』菜单,在弹出窗口中双击“管理工具”图标进
入管理工具界面,双击“数据源(ODBC)”图标。
1.建立KingbaseES数据源
①选择“系统DSN”Ñ¡Ïµ¥»÷¡¾Ìí¼Ó(D)…¡¿°´Å¥£¬ÏµÍ³µ¯³ö“´´½¨ÐÂÊý¾ÝÔ´”
②如图所示在ODBC驱动器程序列表中,选择“KingbaseODBCDriver”,单
击【完成】按钮,系统弹出“KingbaseODBC数据源配置”对话框,
③输入数据源名称、数据库名称以及数据库IP地址。
图中数据源的名称为
KingbaseESODBC,连接的数据库为“学生课程数据库”,服务器为localhost,用
户名和口令分别为SYSTEM和MANAGER。
注意:
KingbaseES区别大小写。
KingbaseODBC数据源配置
④单击【保存】按钮,这样就创建了一个名为“KingbaseESODBC”KingbaseES的
ODBC数据源。
⑤如果要测试和数据源的连接是否成功,可以单击“测试连接”,系统会根据测试
的结果反馈相应的消息框,成功后会出现如下图:
以上五步就建立了一个名为KingbaseESODBC的数据源。
2、建立SQLServer数据源。
①选择“系统DSN”选项,单击【添加(D)…】按钮,系统弹出“创建新数据源”
对话框,如图所示
②如图所示,在ODBC驱动器程序列表中,选择“SQLServer”,单击【完成】
按钮,系统弹出“CreateNewDataSourcetoSQLServer”对话框,如图所示。
创建数据源配置
③如图,输入数据源名称和服务器,单击【下一步】按钮。
图中数据源的名称
为SQLServer,服务器为(local)。
如图,选择身份认证方式,输入用户名和密码,
用户名和口令分别为sa和sa(请根据实际情况进行修改,并对源代码进行相应的
修改)。
④连续单击【下一步】按钮,这样就创建了一个名为“SQLServer”的SQLServer
ODBC数据源。
如图所示,将弹出一个提示框,提示即将创建一个新的ODBC
数据源。
⑤如果要测试和数据源的连接是否成功,可以单击“TestDataSource”,如果连接
成功,系统将会显示一个连接成功的消息框,
以上五步就建立了一个名为SQLServer的数据源。
二.通过ODBC访问异构数据库,并且对异构数据库进行操作。
1.实验环境介绍。
在实验中,我们已经成功安装了KingbaseESV4.1,自动建立的“学生课程数据库”
中含有基本表Student,其中安装路径为C:
\ProgramFiles目录下。
我们还需要在SQLServer
中预先建立基本表STUDENT。
在本实验中,我们将编写程序连接两个不同RDBMS的数据源,将KingbaseES数据库
中的STUDENT表中的数据备份到SQLServer数据库的STUDENT中。
2.在VC++6.0环境中编程实现访问数据库,代码如下:
#include
#include
#include
#include
#include
#include
#defineSNO_LEN30
#defineNAME_LEN50
#defineDEPART_LEN100
#defineSSEX_LEN5
intmain()
{
/*Step1定义句柄和变量*/
//以king开头的表示的是连接KingbaseES的变量
//以server开头的表示的是连接SQLSERVER的变量
SQLHENVkinghenv,serverhenv;//环境句柄
SQLHDBCkinghdbc,serverhdbc;//连接句柄
SQLHSTMTkinghstmt,serverhstmt;//语句句柄
SQLRETURNret;
SQLCHARsName[NAME_LEN],sDepart[DEPART_LEN],sSex[SSEX_LEN],sSno[SNO_LEN];
SQLINTEGERsAge;
SQLINTEGERcbAge=0,cbSno=SQL_NTS,cbSex=SQL_NTS,cbName=SQL_NTS,cbDepart=SQL_NTS;
/*Step2初始化环境*/
ret=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&kinghenv);
ret=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&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,"kingbase",SQL_NTS,"DBA",SQL_NTS,"dba",SQL_NTS);
if(!
SQL_SUCCEEDED(ret))//连接失败时返回错误值
return-1;
ret=SQLConnect(serverhdbc,"postgres",SQL_NTS,"postgres",SQL_NTS,"123456",SQL_NTS);
if(!
SQL_SUCCEEDED(ret))//连接失败时返回错误值
return-1;
/*Step4:
初始化语句句柄*/
ret=SQLAllocHandle(SQL_HANDLE_STMT,kinghdbc,&kinghstmt);
ret=SQLSetStmtAttr(kinghstmt,SQL_ATTR_ROW_BIND_TYPE,(SQLPOINTER)SQL_BIND_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);
ret=SQLBindParameter(serverhstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,NAME_LEN,0,sName,0,&cbName);
ret=SQLBindParameter(serverhstmt,3,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,2,0,sSex,0,&cbSex);
ret=SQLBindParameter(serverhstmt,4,SQL_PARAM_INPUT,SQL_C_LONG,SQL_INTEGER,0,0,&sAge,0,&cbAge);
ret=SQLBindParameter(serverhstmt,5,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,DEPART_LEN,0,sDepart,0,&cbDepart);
}
/*执行SQL语句*/
ret=SQLExecDirect(kinghstmt,"SELECT*FROMSTUDENT",SQL_NTS);
if(ret==SQL_SUCCESS||ret==SQL_SUCCESS_WITH_INFO)
{
ret=SQLBindCol(kinghstmt,1,SQL_C_CHAR,sSno,SNO_LEN,&cbSno);
ret=SQLBindCol(kinghstmt,2,SQL_C_CHAR,sName,NAME_LEN,&cbName);
ret=SQLBindCol(kinghstmt,3,SQL_C_CHAR,sSex,SSEX_LEN,&cbSex);
ret=SQLBindCol(kinghstmt,4,SQL_C_LONG,&sAge,0,&cbAge);
ret=SQLBindCol(kinghstmt,5,SQL_C_CHAR,sDepart,DEPART_LEN,&cbDepart);
}
/*Step6:
处理结果集并执行预编译后的语句*/
while((ret=SQLFetch(kinghstmt))!
=SQL_NO_DATA_FOUND)
{
if(ret==SQL_ERROR)printf("Fetcherror\n");
else
ret=SQLExecute(serverhstmt);
}
/*Step7中止处理*/
SQLFreeHandle(SQL_HANDLE_STMT,kinghstmt);
SQLDisconnect(kinghdbc);
SQLFreeHandle(SQL_HANDLE_DBC,kinghdbc);
SQLFreeHandle(SQL_HANDLE_ENV,kinghenv);
SQLFreeHandle(SQL_HANDLE_STMT,serverhstmt);
SQLDisconnect(serverhdbc);
SQLFreeHandle(SQL_HANDLE_DBC,serverhdbc);
SQLFreeHandle(SQL_HANDLE_ENV,serverhenv);
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
