在VC 中用ODBC访问SQL Server数据库.doc_第1页
在VC 中用ODBC访问SQL Server数据库.doc_第2页
在VC 中用ODBC访问SQL Server数据库.doc_第3页
在VC 中用ODBC访问SQL Server数据库.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

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

文档简介

在vc+中用odbc访问sql server数据库 odbc(open database connectivity,开放数据库连接)是由microsoft定义的一种数据库访问标准,它提供了一种标准的数据库访问方法以访问不同数据库提供商的数据库,其本质上是一组数据库访问api。虽然数据库访问有多种方法,但odbc以其编程相对简单,在实际编程中被广泛使用。 vc+中提供了一组封装了odbc api的mfc odbc类,以减少程序代码编写量。在vc+中使用mfc odbc类访问数据库时,一般都是先配置或选择已有的数据源,再构造cdatabase类对象,打开数据源,用该数据库类对象和sql(结构化查询语言)可以对库进行访问,再构造crecordset类或其继承类对象,用数据集类对象和sql可以实现对库中的表的操作。在vc+中用mfc odbc类操作sql server数据库基本上也是这个思路。1.配置数据源在程序中根据用户选择动态配置数据源而不调用odbc数据源管理器,对于应用程序开发有时是十分必要的。毕竟odbc数据源管理器对于对数据库不熟悉的用户显的复杂了,且odbc数据源管理器的界面风格有可能与整个应用程序的界面风格不一致,对于严谨的应用程序开发者来说,这些都是不能容忍的。配置sql server数据源时,必须有sql server服务器名和服务器中的目标数据库名(否则打开该数据源时,就会弹出配置数据源对话框或失败)。这与配置access等数据库的数据源时指定数据库文件的路径不同。可以通过odbc api函数sqlbrowseconnect得到本地所有的sql server服务器、服务器中的库、语言信息等。其使用方法如下所示:得到服务器名 sqlbrowseconnect(hdbc, driver=sql server;, sql_nts, browseresult, sizeof(browseresult), &browseresultlen);其中hdbc是用sqlallochandle函数得到的连结句柄,第二个参数是指定连结属性的输入字符串,第三个参数是输入字符串的长度,第四个参数是输出字符串的指针,我们要得到的信息就存于这个字符串中,第五个参数指定输出字符串的长度,第六个参数是实际返回字符串的长度。browseresult所指向的函数返回的字符串中含有形如“server:server=server_name1,server_name2,”的字符串,其中server_name1、server_name2就是sql server服务器名。得到库名当用户选定一个服务器之后,可以进一步利用sqlbrowseconnect函数得到服务器中存在的库或语言信息(如果需要的话)。sqlbrowseconnect(hdbc,server=server_name1;uid=sa;pwd=515578;,sql_nts, browseresult, sizeof(browseresult), &browseresultlen);其中uid和pwd是访问该服务器的用户名和密码。这次browseresult所指向的函数返回的字符串中含有形如database:database=master,model,和language:language=arabic, brazilian, english, 的字符串,其中master、model为服务器中的数据库名。利用这些得到信息就可以配置sql server数据源了:sqlconfigdatasource(null,odbc_add_dsn,sql server,dsn=mydsn0 server=xhm0database=pubs00 )作者有幸在网上找到santosh rao编写的csqlinfoenumerator类,该类有 enumeratesqlservers、enumeratedatabase、enumeratedatabaselanguage三个成员函数,其封装了sqlbrowseconnect函数并进行相应的字符处理,大大简化了sqlbrowseconnect函数的使用。2.与数据源建立连接如果使用odbc api函数进行连结,函数sqlconnect、sqldriverconnect和sqlbrowseconnect都可以实现。其中sqlconnect函数用于给定所有参数直接建立与数据源的连接;sqldriverconnect用于给定了部分连接参数,并弹出数据源浏览窗口与用户交互,获得足够的参数后建立与数据源的连接;而sqlbrowseconnect是通过迭代获取连结参数再进行连接,其使用如前所述。mfc为连接数据源提供了一个数据库类cdatabase,通过它我们可以非常方便地与数据源建立连结:/m_db是cdatabase的对象/m_szuserid,m_szpassword是cstring对象,为访问数据源的用户名和密码 cstring str; str = _t(dsn=xhmtest;uid=)+m_szuserid+_t(;pwd=)+m_szpassword; if (! m_db.openex(str, cdatabase:noodbcdialog ) ) afxmessagebox(打开数据源失败);另外,如果我们想对数据源进行操作,就可以利用打开的cdatabase对象执行sql语句实现。如新建一张表: str = create table tabledemo (column1text, column2 number); m_db.executesql(ssql); 3.得到数据库的结构信息在vc+中可以单独利用odbc api获取数据库的结构信息,但方法非常复杂,各种参数也不易理解,且返回的结果不易获取。mfc中也没有为应用程序开发者得到数据库结构信息而提供单独的类。但是我们还是可以通过一些已有的方法方便地获得数据库的结构信息。3.1 得到数据库中的表利用odbc api函数sqltables可以得到数据库中的表信息,但使用不易。在msdn的sample中有一个catalog例程,它示范了如果得到一个数据库的表信息和表中的字段信息,该程序中有两个非常实用的类:ctables和ccolumns。其中ctables继承crecordset类,通过非常巧妙的方法封装了sqltables函数,并将结果集存于crecordset类,方便获取。在程序中我们可以这样应用: /m_db是已经打开的cdatabse对象, /m_strtableowner是ccombobox对象 ctables rs(&m_db); rs.open(null, null, null, table); cstring strtableref; m_combtable.resetcontent(); while (!rs.iseof() strtableref = _t(); if (!rs.m_strtableowner.isempty() strtableref += rs.m_strtableowner + _t(.); strtableref += rs.m_strtablename + _t(); m_combtable.addstring(strtableref); rs.movenext(); rs.close();在ctables对象open方法第四个能数指定“table”是指返回库中的表,当该参数为“system table”时返回系统表,当为null时,返回所有表。3.2 得到表中字段结构 得到表中字段结构有三种具体实现方式:直接利用odbc api 函数sqlcolumn;其实现也同样复杂。利用前面提到的封装了sqlcolumns函数的ccolumns类;其使用方法与ctables类似,其成员变量m_strcolumnname即为字段名利用crecordset类的成员函数。mfc在crecordset类中提供了获取表结构信息方法,使用非常方便。(但很奇怪为什么cdatabase类没有获取库结构信息的类方法?)我们以利用crecodrset为例简单说明怎样得到表结构。假设现在要得到用户在ccombobox对象中所选表的所有字段名,并将它埴入一个clistctrl对象(其view属性被设为report)的列名中去: /m_strtableowner和上同,为ccombobox对象 /m_listdata为clistctrl对象 crecordset rs codbcfieldinfo info;cstring strsql; m_combtable.getlbtext(m_combtable.getcursel(), strsql); strsql = _t(select * from ) + strsql; rs.open(open(crecordset:snapshot, strsql, crecordset:readonly); int ncolumns = rs.getodbcfieldcount(); for (int nnum = 0; nnum getodbcfieldinfo(nnum, info); m_listdata.insertcolumn(nnum, info

温馨提示

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

评论

0/150

提交评论