数据库原理-实验7-通过ODBC访问数据库_第1页
数据库原理-实验7-通过ODBC访问数据库_第2页
数据库原理-实验7-通过ODBC访问数据库_第3页
数据库原理-实验7-通过ODBC访问数据库_第4页
数据库原理-实验7-通过ODBC访问数据库_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一、囊淼©的:1. 理解odbc的相关概念:odbc、句柄等;2. 理解odbc的工作原理;3. 掌握odbc的工作流程;4. 掌握通过odbc访问数据库的方法二、实淼钚境:sql server 2008、vc+ 6.0三、囊游令时:2学时(一)配置数据源配置数据源共有两种方法:lo方法一:运用数据源管理工具来进行配s方法二:使用driver manager提供的configdsn函数来增加、修改或删除数据源。这种方法特别适用于在应用程序中创建的临时使用的数据源,在本实验中,我们采用第一种方法创建数据源。我们将其取名为sqlserver。下面是建立这数据源的具体步7u;jwo选择开始

2、i设置i控制面板菜单,在弹出窗口中双击“管理工具"i标进入管理工具界面,双击“数据源(odbc r图标建立sqlserver数据源。(1 )选择“系统dsn”选项,单击【添加(d).】按钮,系统弹出“创建新据源”对话框,如下图所示:1数据源管理器(2)如固2所示,在odbc驱动器程序列表中,选择“sql server”,单击【完成i 按钮,系统弹出 “create new data source to sql server”对话框,如图2所示:2创建数据源配置3)如图3 ,输入数据源名称和服务器,单击【下一步】按钮。图中数据源的名称为sqlserver,服务器为(local)。如图4

3、,选择身份认证方式,输入用户名和密码,用户名和口令分别为sa和sa (请根据实际情况进行修改,并对源代码进行相应的修t(n) >取消触3 sqlserver数据源配置(1 )创建到sql server的新数据源sql server应该如何裕ie登录id的頁伪?o使用网洛登录id的windows nt脸证(w).(;使用用户瑤入曼录id钔宏码的sql server验证(s).要更改用于与sql server愈r的网络库,清单壬“客力声頤0连接sql server以获馮其它配直透项的默认设罝(c).图4 sqlserver数据源配置(2 )(4)连续单击【下一步】按钮,这样就创建了一个名为“

4、sqlserver sqlserver odbc数据源。如图5所示,将弹出一个提示框,提示即将创建一个新的odbc数据源。5提示框5)如果要测试和数据源的连接是否成功,可以单击“test data source”,如果连接成功,系统将会显示一个连接成功的消息框,如图6所示。6连接成功以上五步就建立了一个名为sqlserver的数据源。注:在创建数据源,测试连接是否成功时,如果kingbasees和sql server未启动服务,则将显示连接失败。启动服务后,再进行测试,连接成功(二)通过odbc访问数据库,并且对数据库进行操作。1. 实验环境介绍。在本实验中,我们将编写程序连接到rdbms的数

5、据源,将数据录入到sqlserver数据库的student中。2. 在vc+6.0环境中编程实现访问数据库。(1 )实验预备。本实验源程序名为odbc ,代码在数据库系统概论书中已经给出。下我们将在vc+6.0环境下对该程序进行编译,(2) 实验步骤。首先,在vc+6.0中新建一个win32 console application的项目,并将项目命名为odbc03。然后,将已经写好的odbc.c文件加入到该项目的source files中,编译并且执行。(3) 实验源代码。以下为本实验实际程序的源码,并给出了一些注释,供参考。#include <stdio.h>#include &

6、lt;iostream.h>#include <string.h>#include <windows.h>#include <sql.h>#include <sqlext.h>#include <odbcss.h>#define maxbuflen 255#define maxnamelen 20/下面这句是预处理语句,使程序在编译时分别编译綁定段或sqlgetdata段#define sqlbindcolsqlhenvsqlhdbcsqlhstmthenv = sql_null_henv;/定义环境句柄hdbcl = sql_

7、null_hdbc;/定义数据库连接句柄hstmtl = sql_null_hstmt;/定义语句句柄int main()retcode retcode;/错误返回码/ allocate the odbc environment and save handle.retcode = sqlaiiochandle (sql_handle_env, null, &henv);if(retcode < 0 )/错误处理cout«hallocate odbc environment handle errors.h«endl;return -1:/ notify odbc

8、 that this is an odbc 3.0 application.retcode = sqlsetenvattr(henv, sql_attr_odbc_version,(sqlpointer) sql_ov_odbc3, sqljsjnteger);if(retcode < 0 ) /错误处理cout«"the odbc is not version3.0 "<<endl;return -1;/ allocate an odbc connection and connect.retcode = sqlaiiochandle(sql_h

9、andle_dbc, henv, &hdbc1);if(retcode < 0 ) /错误处理cout«nallocate odbc connection handle errors."«endl;return -1;/data source name must be of type user dns or system dnschar* szdsn = "sql_37"char* szuid = "sa"/log namechar* szauthstr = h1234321 n;/passward/conne

10、ct to the data source retcode=sqlconnect(hdbc1,(sqlchar*)szdsn,(sword)strlen(szdsn),(sqlchar*)szuid, (sword)strlen(szuid),(sqlchar*)szauthstr,(sword)strlen(szauthstr);if(retcode < 0 ) /错误处理cout«hconnect to odbc datasource errors.*'«endl;return -1;/ allocate a statement handle.retcod

11、e = sqlaiiochandle(sql_handle_stmt, hdbcl, &hstmt1);if(retcode < 0 ) /错误处理cout«hallocate odbc statement handle errors."«endl;return -1;ii execute an sql statement directly on the statement handle.每一句后面都跟了一个错误处理,当发生错误时可以很方便的判断错在哪里retcode = sqlexecdirect(hstmt1,(sqlchar*)"cr

12、eate table s(sno char(5) primary key,sname char(10) not null,ssex char(2),sage int, sdeptchar(10)",sql一nts);if(retcode<0)cout«"creat errors."«endl;return -1;retcode = sqlexecdirect(hstmt1,(sqlchar*)"insert into s valuesf9500r/郝红,女jo,1计科广,sql_nts);if(retcode<0)cout

13、«"s1 insert errors.h«endl;return -1;retcode = sqlexecdirect(hstmt1,(sqlchar*)hinsert into s valuesc95002?秦沛男,21, 计科sqljsits);if(retcode<0)cout«"s2 insert errors.,«endl;return retcodesqlexecdirect(hstmt1,(sqlchar*)"insertinto svaluesf95003?刘蓉/女 |,22, 网络 *)",

14、sql_nts> if(retcode<0)cout«"s3 insert errors.t,«endl;return -1:retcodesqlexecdirect(hstmt1,(sqlchar*)"insertinto svaluesf95004?张超?男 jo,网络*)",sql_nts> if(retcode<0)cout«"s4 insert errors.”<<endl;returninto sretcode = sqlexecdirect(hstmt1,(sqlchar*)

15、"insert valuesf950057 王珂/男 jo,软件 y,sql_nts);if(retcode<0)cout«"s5 insert errors."«endl;return -retcode = sqlexecdirect(hstmt1,(sqlchar*)"insert into svaluesc95006?计划/男',21,软件 y,sql_nts>if(retcode<0)cout«"s6 insert errors.,'«endl;return -1

16、;retcode = sqlexecdirect(hstmt1,(sqlchar*)"seiect sname,sdeptfrom s", sql_nts);if(retcode < 0)cout«hexecuting statement throught odbc errors.m«endl;return -1;/ sqlbindcol variablessqlchar snamemaxnamelen + 1;sqlinteger columnlen = 0;/数据库定义中该属性列的长度#ifdef sqlbindcol/游标已被封装在其中,一开

17、始把两个列号分别写为s中的列号2( sname ), 5( sdept),第二个参数应为游标中的列号,而不是表中的列号,retcode=sqlbindcol(hstmt1,1,sql_c_char,sname,maxnamelen , &columnlen);retcode = sqlbindcol(hstmt1,2, sql_c_char,sdept,maxnamelen ,&columnlen);while (retcode = sqlfetch(hstmtl) != sql一no一data)if(columnlen>0)printffsname = %s sdept

18、 = %sn", sname,sdept);elseprintffsname = %s sdept = nulln", sname,sdept);#elsewhile(1 )retcode = sqlfetch(hstmtl);if(retcode = sql_no_data)sname,sdept,break;retcode = sqlgetdata(hstmt1, 1, sql_c_char,maxnamelen, &columnlen);retcode = sqlgetdata(hstmt1, 2, sql_c_char,maxnamelen, &columnlen);if(columnlen>0)printffsname = %s sdept = %sn", sname,sdept);elseprintffsname = %s sdept = nulln", sname,sdept);#endif/* clean up.*/sqlfreehandle(sql_handle_s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论