⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 csdn_文档中心_用visual c++开发数据库应用程序.htm

📁 csdn10年中间经典帖子
💻 HTM
📖 第 1 页 / 共 3 页
字号:
				year1=tmpDate.getYear()
				year= year1.toString().substr(1,2);
			}
			else
				year= tmpDate.getYear();
			
			document.write(year);
			document.write(".");
			document.write(month);
			document.write(".");
			document.write(date);
			// -->
			</SCRIPT>
      </B>&nbsp;&nbsp;</TD></TR>
  <TR bgColor=#999999>
    <TD colSpan=3 height=1></TD></TR></TBODY></TABLE>
<TABLE border=0 width=770>
  <TBODY>
  <TR>
    <TD align=middle bgColor=#fafafa class=td1 vAlign=top width=150><BR>
      <SCRIPT src="CSDN_文档中心_用Visual C++开发数据库应用程序.files/microsoft.js"></SCRIPT>
    </TD>
    <TD align=middle width=620>
      <TABLE bgColor=#eeeeee border=0 cellPadding=0 cellSpacing=0 width=600>
        <TBODY>
        <TR bgColor=#ffffff>
          <TD align=middle height=10 width=50></TD>
          <TD align=right><A href="http://www.csdn.net/">CSDN</A> - <A 
            href="http://www.csdn.net/develop/">文档中心</A> - <FONT 
            color=#003399>Visual C++</FONT>&nbsp;&nbsp;&nbsp;&nbsp; </TD></TR>
        <TR>
          <TD align=middle height=5></TD>
          <TD align=middle width=500></TD></TR>
        <TR>
          <TD align=middle bgColor=#003399 height=10><FONT 
            color=#ffffff>标题</FONT></TD>
          <TD><B>&nbsp;&nbsp;&nbsp;&nbsp;用Visual 
            C++开发数据库应用程序</B>&nbsp;&nbsp;&nbsp;&nbsp;zzh(原作) </TD></TR>
        <TR>
          <TD align=middle height=5></TD>
          <TD align=middle width=500></TD></TR>
        <TR>
          <TD align=middle bgColor=#003399><FONT color=#ffffff>关键字</FONT></TD>
          <TD width=500>&nbsp;&nbsp;&nbsp;&nbsp;用Visual C++开发数据库应用程序</TD></TR>
        <TR>
          <TD align=middle height=5></TD>
          <TD align=middle width=500></TD></TR></TBODY></TABLE><!--文章说明信息结束//-->
      <TABLE border=0 width=600>
        <TBODY>
        <TR>
          <TD align=left><BR>用Visual 
            C++开发数据库应用程序<BR><BR>EMAIL:zzh1415@21cn.com<BR><BR>1、 概述<BR><BR>1、1 
            Visual C++开发数据库技术的特点<BR><BR>Visual C++提供了多种多样的数据库访问技术——ODBC API、MFC 
            ODBC、DAO、OLE 
            DB、ADO等。这些技术各有自己的特点,它们提供了简单、灵活、访问速度快、可扩展性好的开发技术。<BR><BR><BR>简单性<BR><BR>Visual 
            C++中提供了MFC类库、ATL模板类以及AppWizard、ClassWizard等一系列的Wizard工具用于帮助用户快速的建立自己的应用程序,大大简化了应用程序的设计。使用这些技术,可以使开发者编写很少的代码或不需编写代码就可以开发一个数据库应用程序。<BR><BR><BR>灵活性<BR><BR>Visual 
            C++提供的开发环境可以使开发者根据自己的需要设计应用程序的界面和功能,而且,Visual 
            C++提供了丰富的类库和方法,可以使开发者根据自己的应用特点进行选择。<BR><BR><BR>访问速度快<BR><BR>为了解决ODBC开发的数据库应用程序访问数据库的速度慢的问题,Visual 
            C++提供了新的访问技术——OLE DB和ADO,OLE 
            DB和ADO都是基于COM接口的技术,使用这种技术可以直接对数据库的驱动程序进行访问,这大大提供了访问速度。<BR><BR><BR>可扩展性<BR><BR>Visual 
            C++提供了OLE技术和ActiveX技术,这种技术可以增强应用程序的能力。使用OLE技术和ActiveX技术可以使开发者利用Visual 
            C++中提供的各种组件、控件以及第三方开发者提供的组件来创建自己的程序,从而实现应用程序的组件化。使用这种技术可以使应用程序具有良好的可扩展性。<BR><BR><BR>访问不同种类数据源<BR><BR>传统的ODBC技术只能访问关系型数据库,在Visual 
            C++中,提供了OLE DB访问技术,不仅可以访问关系型数据库,还可以访问非关系型数据库。<BR><BR>1、2 Visual 
            C++开发数据库技术<BR><BR>Visual C++提供了多种访问数据库的技术,如下所示:<BR><BR><BR>ODBC(Open 
            DataBase Connectivity)<BR><BR><BR>MFC ODBC(Microsoft Foundation 
            Classes ODBC)<BR><BR><BR>DAO (Data Access Object)<BR><BR><BR>OLE 
            DB(Object Link and Embedding DataBase)<BR><BR><BR>ADO(ActiveX Data 
            Object)<BR><BR>这些技术各有自己的特点,总结如下:<BR><BR><BR>ODBC<BR><BR>ODBC是客户应用程序访问关系数据库时提供的一个统一的接口,对于不同的数据库,ODBC提供了一套统一的API,使应用程序可以应用所提供的API来访问任何提供了ODBC驱动程序的数据库。而且,ODBC已经成为一种标准,所以,目前所有的关系数据库都提供了ODBC驱动程序,这使ODBC的应用非常广泛,基本上可用于所有的关系数据库。<BR><BR>但由于ODBC只能用于关系数据库,使得利用ODBC很难访问对象数据库及其它非关系数据库。<BR><BR>由于ODBC是一种底层的访问技术,因些,ODBC 
            API可以使客户应用程序能够从底层设置和控制数据库,完成一些高层数据库技术无法完成的功能。<BR><BR><BR>MFC 
            ODBC<BR><BR>由于直接使用ODBCAPI编写应用程序要编制大量代码,在Visual C++中提供了MFC 
            ODBC类,封装了ODBC 
            API,这使得利用MFC来创建ODBC的应用程序非常简便。<BR><BR><BR>DAO<BR><BR>DAO提供了一种通过程序代码创建和操纵数据库的机制。多个DAO构成一个体系结构,在这个结构中,各个DAO对象协同工作。MFC 
            DAO是微软提供的用于访问Microsoft 
            Jet数据库文件(*.mdb)的强有力的数据库开发工具,它通过DAO的封装,向程序员提供了DAO丰富的操作数据库手段。<BR><BR><BR>OLE 
            DB<BR><BR>OLE DB是Visual C++开发数据库应用中提供的新技术,它基于COM接口。因此,OLE 
            DB对所有的文件系统包括关系数据库和非关系数据库都提供了统一的接口。这些特性使得OLE 
            DB技术比传统的数据库访问技术更加优越。<BR><BR>与ODBC技术相似,OLE 
            DB属于数据库访问技术中的底层接口。<BR><BR>直接使用OLE 
            DB来设计数据库应用程序需要大量的代码。在VC中提供了ATL模板,用于设计OLE 
            DB数据应用程序和数据提供程序。<BR><BR><BR>ADO<BR><BR>ADO技术是基于OLE DB的访问接口,它继承了OLE 
            DB技术的优点,并且,ADO对OLE 
            DB的接口作了封装,定义了ADO对象,使程序开发得到简化,ADO技术属于数据库访问的高层接口。<BR><BR> <BR><BR>2、 
            使用ODBC API<BR><BR>Microsoft 开放数据库互连(ODBC,Open DataBase 
            Connectivity)是Microsoft Windows 
            开放服务体系(WOSA)的一部分,是一个数据库访问的标准接口。使用这一标准接口,我们可以不关心具体的数据库管理系统(DBMS)的细节,而只要有相应类型数据库的ODBC驱动程序,就可以实现对数据库的访问。<BR><BR>ODBC编程接口为我们提供了极大的灵活性,我们可以通过这一个接口访问不同种类的数据库。而且,通过相应的ODBC驱动程序,我们可以方便地实现不同数据类型之间的转换。<BR><BR>2.1 
            ODBC API 
            概述<BR><BR>ODBC是一个应用广泛的数据库访问应用编程接口(API),使用标准的SQL(结构化查询语言)作为其数据库访问语言。<BR><BR>2.11体系结构<BR><BR>ODBC的结构是建立在客户机/服务器体系结构之上,它包含如下四个部分:<BR><BR>应用程序(Application 
            ):<BR><BR>应用程序即用户的应用,它负责用户与用户接口之间的交互操作,以及调用ODBC函数以给出SQL请求并提取结果以及进行错误处理。<BR><BR>ODBC驱动程序管理器(Driver 
            Manager):<BR><BR>ODBC驱动程序管理器为应用程序加载和调用驱动程序,它可以同时管理多个应用程序和多个驱动程序。它的功能是通过间接调用函数和使用动态链接库(DLL)来实现的,因此它一般包含在扩展名为”DLL”的文件中。<BR><BR>ODBC驱动程序(Driver)<BR><BR>ODBC 
            驱动程序执行ODBC函数调用,呈送 SQL 
            请求给指定的数据源,并将结果返回给应用程序。驱动程序也负责与任何访问数据源的必要软件层进行交互作用,这种层包括与底层网络或文件系统接口的软件。<BR><BR>数据源<BR><BR>数据源由数据集和与其相关联的环境组成,包括操作系统、DBMS 
            和网络(如果存在的话)。ODBC 
            通过引入“数据源”的概念解决了网络拓扑结构和主机的大范围差异问题,这样,用户看到的是数据源的名称而不必关心其它东西。<BR><BR>2.12数据类型<BR><BR>ODBC使用两类数据类型:SQL数据类型和C数据类型。SQL数据类型用于数据源,C数据类型用于应用程序代码中。<BR><BR>2.13句柄<BR><BR>ODBC 
            API 
            实现数据库操作的手段是语句,这是一个强有力的手段。ODBC语句除了能执行SQL语句和完成查询操作之外,还能实现大多数数据库操作。<BR><BR>在ODBC中,使用不同的句柄(HANDLE)来标志环境(ENVIRONMENT)、连接(CONNECTION)、语句(STATEMENT)、描述器(DESCRIPTOR)等。<BR><BR>句柄就是一个应用程序变量,系统用它来存储关于应用程序的上下文信息和应用程序所用到的一些对象。它和 
            Windows 编程中的概念类似,不过ODBC 更加完善了句柄的作用。<BR><BR>1、 环境句柄是 ODBC 
            中整个上下文的句柄,使用 ODBC 
            的每个程序从创建环境句柄开始,以释放环境句柄结束。所有其它的句柄(这一应用程序所有的联接句柄和语句句柄)都由环境句柄中的上下文来管理。环境句柄在每个应用程序中只能创建一个。<BR><BR>2、联接句柄管理有关联接的所有信息。联接句柄可以分配多个,这不仅合法而且很有用;但不要生成不必要的句柄以免资源的浪费。但是,不同的驱动程序支持的联接情况有所不同,有的驱动程序在一个应用程序中仅支持一个联接句柄,有的驱动程序仅支持一个语句句柄。在应用程序中,可以在任何适当的时候联接或脱离数据源,但不要轻易地建立或脱离联接。<BR><BR>3、语句句柄是 
            ODBC API 真正发挥重要作用的,它被用来处理 SQL 
            语句及目录函数,每个语句句柄只与一个联接有关。当驱动程序接收一个来自应用程序的函数调用指令而该指令包含一个语句句柄时,驱动程序管理器将使用存储在语句句柄中的联接句柄来将这一函数调用发送给合适的驱动程序。<BR><BR>4、描述器句柄是元数据的集合,这些元数据描述了SQL语句的参数、记录集的列等信息。当有语句被分配内存之后,描述器自动生成,称为自动分配描述器。在程序中,应用程序也可调用SQLAllocHandle分配描述器。<BR><BR>当应用程序调用API函数SQLAllocHandle时,驱动管理器或者ODBC驱动程序将为所声明的句柄类型分配内部结构,返回句柄值。<BR><BR>2.14异常处理<BR><BR>为了在程序开发过程中调试程序,发现程序错误,ODBC 
            API通过两种方式返回有关ODBC 
            API函数执行的的信息:返回码和诊断记录。返回码返回函数执行的返回值,说明函数执行成功与否。诊断记录说明函数执行的详细信息。<BR><BR><BR>返回码(Return 
            Code)<BR><BR>每一个ODBC 
            API函数都返回一个代码——返回码,指示函数执行的成功与否。如果函数调用成功,返回码为SQL_SUCCESS或SQL_SUCCESS_WITH_INFO。SQL_SUCCESS指示可通过诊断记录获取有关操作的详细信息,SQL_SUCCESS_WITH_INFO指示应用程序执行结果带有警告信息,可通过诊断记录获取详细的信息。如果函数调用失败,返回码为SQL_ERROR。<BR><BR>下面的一段代码根据函数SQLFetch()执行的返回码,判断函数执行的成功与否,从而据此进行相应的处理。<BR><BR>SQLRETURN 
            rtcode;<BR><BR>SQLHSTMT 
            hstmt;<BR><BR>While(rtcode=SQLFetch(hstmt)!=SQL_NO_DATA)<BR><BR>{<BR><BR>if(rtcode==SQL_SUCCESS_WITH_INFO)<BR><BR>{<BR><BR>//显示警告信息<BR><BR>}<BR><BR>else<BR><BR>{<BR><BR>//显示出错信息<BR><BR>break;<BR><BR>}<BR><BR>//函数调用成功,进行处理<BR><BR>}<BR><BR>如果程序执行错误,返回码为SQL_INVALID_HANDLE,程序无法执行,而其它的返回码都带有程序执行的信息。<BR><BR><BR>诊断记录(Diagnostic 
            Records)<BR><BR>每个ODBC 
            API函数都能够产生一系列的反映操作信息的诊断记录。这些诊断记录放在相关连的ODBC句柄中,直到下一个使用同一个句柄的函数调用,该诊断记录一直存在。诊断记录的大小没有限制。<BR><BR>诊断记录有两类:头记录(Head 
            Record)和状态记录(Status Record)。头记录是第一版权法记录(Record 
            0),后面的记录为状态记录。诊断记录有许多的域组成,这些域在头记录和状态记录中是不同的。<BR><BR>可以用SQLGetDiagField函数获取诊断记录中的特定的域,另外,可以使用SQLGetDiagRec()获取诊断记录中一些常用的域,如SQLSTATE、原始错误号等。<BR><BR><BR>头记录<BR><BR>头记录的各个域中包含了一个函数执行的通用信息,无论函数执行成功与否,只要不返回SQL_INVALID_HANDLE,都会生成头记录。<BR><BR><BR>状态记录<BR><BR>状态记录中的每个域包含了驱动管理器、ODBC驱动程序或数据源返回的特定的错误或警告信息,包括SQLSTATE、原始错误码、诊断信息、列号和行号等。只有函数执行返回SQL_ERROR,SQL_STILL_EXEUTING、SQL_SUCCESS_WITH_INFO、SQL_NEED_DATA或SQL_NO_DATA时,才会生成诊断记录。<BR><BR><BR>使用SQLGetDiagRec和SQLGetDiagField<BR><BR>应用程序可以调用函数SQLGetDiagRec或SQLGetDiagField获取诊断信息。对于给定的句柄,这两个函数返回最近使用该句柄的函数的诊断信息。当有使用该句柄的函数执行时,句柄记录所记录的原有的诊断信息被覆盖。如果函数执行后产生多个状态记录,程序必须多次调用这两个函数以获取信息。<BR><BR>2.2 
            应用ODBC API建立应用程序<BR><BR>虽然直接应用ODBC API编制应用程序相对来说较为繁琐,但是,由于直接使用ODBC 
            API编写的程序相对要简洁、高效。所以,我们有必要学习直接使用ODBC 
            API编程。<BR><BR>一般地,编写ODBC程序主要有以下几个步骤:<BR><BR><BR>分配ODBC环境<BR><BR><BR>分配连接句柄<BR><BR><BR>连接数据源<BR><BR><BR>构造和执行SQL语句<BR><BR><BR>取得执行结果<BR><BR><BR>断开同数据源的连接<BR><BR><BR>释放ODBC环境<BR><BR>2.21 
            分配ODBC环境<BR><BR>对于任何ODBC应用程序来说,第一步的工作是装载驱动程序管理器,然后初始化ODBC环境,分配环境句柄。<BR><BR>首先,程序中声明一个SQLHENV类型的变量,然后调用函数SQLAllocHandle,向其中传递分配的上述SQLHENV类型的变量地址和SQL_HANDLE_ENV选项。如下代码所示:<BR><BR>SQLHENV 
            henv;<BR><BR>SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&amp;henv);<BR><BR>执行该调用语句后,驱动程序分配一个结构,该结构中存放环境信息,然后返回对应于该环境的环境句柄。<BR><BR>2.22分配连接句柄<BR><BR>分配环境句柄后,在建立至数据源的连接之前,我们必须分配一个连接句柄,每一个到数据源的连接对应于一个连接句柄。<BR><BR>首先,程序定义了一个SQLHDBC类型的变量,用于存放连接句柄,然后调用SQLAllocHandle函数分配句柄。如下代码所示:<BR><BR>SQLHDBC 
            hdbc;<BR><BR>SQLAllocHandle(SQL_HANDLE_DBC,henv,&amp;hdbc);<BR><BR>henv为环境句柄。<BR><BR>2.23 
            连接数据源<BR><BR>当连接句柄分配完成后,我们可以设置连接属性,所有的连接属性都有缺省值,但是我们可以通过调用函数SQLSetConnectAttr()来设置连接属性。用函数SQLGetConnectAttr()获取这些连接属性。<BR><BR>函数格式如下:<BR><BR>SQLRETURN 
            SQLSetConnectAttr(SQLHDBC ConnectionHandle,SQLINTEGER 
            Attribute,SQLPOINTER ValuePtr,SQLINTEGER 
            StringLength);<BR><BR>SQLRETURN SQLGetConnectAttr(SQLHDBC 
            ConnectionHandle,SQLINTEGER Attribute,SQLPOINTER ValuePtr,SQLINTEGER 
            StringLength);<BR><BR>应用程序可以根据自己的需要设置不同的连接属性。<BR><BR>完成对连接属性的设置之后,就可以建立到数据源的连接了。对于不同的程序和用户接口,可以用不同的函数建立连接:SQLConnect、SQLDriverConnect、SQLBrowseConnect。<BR><BR>SQLConnect<BR><BR>该函数提供了最为直接的程序控制方式,我们只要提供数据源名称、用户ID和口令,就可以进行连接了。<BR><BR>函数格式:<BR><BR>SQLRETURN 
            SQLConnect(SQLHDBC ConnectionHandle,SQLCHAR ServerName,SQLSMALLINT 
            NameLength1,SQLCHAR UserName,SQLSMALLINT NameLength2,SQLCHAR 
            *Authentication,SQLSMALLINT 
            NameLength3);<BR><BR>参数:<BR><BR>ConnectionHandle 
            连接句柄<BR><BR>ServerName 数据源名称<BR><BR>NameLength1 
            数据源名称长度<BR><BR>UserName 用户ID<BR><BR>NameLength2 
            用户ID长度<BR><BR>Authentication 用户口令<BR><BR>NameLength3 
            用户口令长度<BR><BR>返回值:<BR><BR>SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, 
            SQL_ERROR, or 
            SQL_INVALID_HANDLE.<BR><BR>成功返回SQL_SUCCESS,如果返回值为SQL_ERROR或SQL_SUCCESS_WITH_INFO,可以用函数SQLGetDiagRec获取相应SQLSTATE的值。<BR><BR> <BR><BR>下面的代码演示了如何使用ODBC 
            API的SQLConnect函数建立同数据源SQLServer的连接。<BR><BR> <BR><BR>#include 
            “sqlext.h”<BR><BR>SQLHENV henv;;<BR><BR>SQLHDBC 
            hdbc;<BR><BR>SQLHSTMT hstmt;<BR><BR>SQLRETURN 
            retcode;<BR><BR>/*Allocate environment handle */<BR><BR>retcode = 
            SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &amp;henv); 
            <BR><BR>if (retcode == SQL_SUCCESS &brvbar;&brvbar; retcode == 
            SQL_SUCCESS_WITH_INFO) {<BR><BR>/* Set the ODBC version environment 
            attribute */<BR><BR>retcode = SQLSetEnvAttr(henv, 
            SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); <BR><BR>if (retcode 
            == SQL_SUCCESS &brvbar;&brvbar; retcode == SQL_SUCCESS_WITH_INFO) {<BR><BR>/* 
            Allocate connection handle */<BR><BR>retcode = 
            SQLAllocHandle(SQL_HANDLE_DBC, henv, &amp;hdbc); <BR><BR>if (retcode 
            == SQL_SUCCESS &brvbar;&brvbar; retcode == SQL_SUCCESS_WITH_INFO) {<BR><BR>/* Set 
            login timeout to 5 seconds. */<BR><BR>SQLSetConnectAttr(hdbc, 
            (void*)SQL_LOGIN_TIMEOUT, 5, 0);<BR><BR>/* Connect to data source 
            */<BR><BR>retcode = SQLConnect(hdbc, (SQLCHAR*) "Sales", 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -