📄 在visual c++中用ado进行数据库编程 .htm
字号:
<HTML>
<HEAD>
<meta http-equiv='Content-Type' content='text/html; charset=gb2312'>
<meta HTTP-EQUIV='Expires' CONTENT=0>
<link rel='stylesheet' href='../../../../news.css'>
<style type='text/css'>
.fst{padding:0px 15px;width:770px;background:#eeeecc;border-left:1px solid #000000;border-right:1px solid #000000}
.fstdiv3 img{border:0px;border-right:8px solid #eeeecc;border-top:6px solid #eeeecc}
</style>
<title>
在Visual C++中用ADO进行数据库编程
</title>
</HEAD>
<BODY aLink=#990000 bgColor=#ffffff bottomMargin=0 leftMargin=0 rightMargin=0 topMargin=0 marginwidth=0 marginheight=0>
<center>
<TABLE align=center bgColor=#cccc99 border=0 cellPadding=2 cellSpacing=0 width=770>
<TBODY>
<TR>
<TH align=left >
在Visual C++中用ADO进行数据库编程
</TH>
</TD></TR>
</TBODY></TABLE>
<TABLE align=center bgColor=#eeeecc border=1 cellPadding=1 cellSpacing=0 width=770>
<TBODY>
<TR><TD colSpan=5 >
<a href='http://www.csdn.net'>中国软件开发网络</a>
-->
<a href='http://www.csdn.net/develop'>开发图书馆</a>
-->
<a href='http://www.csdn.net\develop\list_article.asp?lib=1&bigclassid=
1
'>
Visual C++
</a>
-->
<a href='http://www.csdn.net\develop\list_article.asp?lib=1&bigclassid=
1
&smallclassid=
107
'>
数据库操作
</a>
-->
<a href='
http://www.csdn.net/develop/library/vc/datebase/4477.shtm
'>
在Visual C++中用ADO进行数据库编程
</a>
</TD></tr>
<TR>
<TD align=left width=300>
<B>关键字:</B><BR>
在Visual C++中用ADO进行数据库编程
</TD>
<TD align=middle width=120>
<B>贴文时间</B><br>
2001-2-18 11:21:58
</TD>
<TD align=middle width=80>
<B>文章类型: </B><BR>
转贴
</TD>
<TD align=middle width=100>
<B>给贴子投票 </B>
<BR><a href='http://www.csdn.net/develop/addscore.asp?id=
4477
'>投票</a>
</TD></TR>
<TR>
<TD >
ren20
转贴
</TD>
<TD colSpan=3 vAlign=top>
<B>出处: </B><A href='
http://home.kzinfo.net/getc/200102/0218007.htm
'>
http://home.kzinfo.net/getc/200102/0218007.htm
</A></TD></TR>
<TR><TD colSpan=5 bgcolor=#cccc99> </TD></TR>
</TD></TR></TBODY></TABLE>
<div align=center><div class=fst align=left><div class=fstdiv3 id=print2>
<br><br><TABLE align=left bgColor=#ffffff border=0 cellPadding=5 cellSpacing=0 height=400 width=608>
<TBODY>
<TR align=left vAlign=top>
<TD class=f1 height=30><B><FONT size=4>在Visual C++中用ADO进行数据库编程</FONT></B></TD>
<TD class=f1 height=30> </TD></TR>
<TR align=middle vAlign=top>
<TD class=f1 colSpan=3 height=10>
<TABLE border=0 cellPadding=0 cellSpacing=0 height=3 width=565>
<TBODY>
<TR>
<TD background=../images/line.gif width=1></TD></TR></TBODY></TABLE></TD></TR>
<TR align=left vAlign=top>
<TD class=f1 width=6> </TD>
<TD class=f1 id=thetd width=565><!--jcstart-->作者: 蒋东宇<BR>转自: www.vckbase.com<BR><BR> ActiveX数据对象(ADO)是OLE DB上面的高层数据库API。我们在C++程序中也可以调用ADO。本文将在VC 6.0环境下做一个小小的例子解释如何使用ADO。 <BR><BR> 1. 生成应用程序框架并初始化OLE/COM库环境 <BR><BR> 创建一个标准的MFC AppWizard(exe)应用程序,然后在应用程序类的InitInstance函数中初始化OLE/COM库(因为ADO库是一个COM DLL库)。 <BR><BR> BOOL CADOTestApp::InitInstance() <BR><BR> { //初始化OLE/COM库环境 <BR><BR>AfxOleInit();} <BR><BR> 2. 引入ADO库文件 <BR><BR> 使用ADO前必须在工程的stdafx.h文件里用直接引入符号#import引入ADO库文件,以使编译器能正确编译。代码如下: <BR><BR> #include 〈comdef.h〉 <BR><BR> #import "c:\program files\common files\system\ado\msado15.dll"<BR><BR> no_namespace <BR><BR> rename ("EOF","adoEOF") <BR><BR> 头文件comdef.h使我们的应用程序能够使用Visual C++中的一些特殊COM支持类,这些类使得处理OLE自治更为容易一些,OLE自治是ADO使用的数据类型。后三行使用#import指令在我们的应用程序中输入ADO类库定义。 <BR><BR> ADO类的定义是作为一种资源存储在ADO DLL(msado15.dll)中,在其内部称为类型库。类型库描述了自治接口,以及C++使用的COM vtable接口。当使用#import指令时,在运行时Visual C++需要从ADO DLL中读取这个类型库,并以此创建一组C++头文件。这些头文件具有.tli 和.tlh扩展名,读者可以在项目的目录下找到这两个文件。在C++程序代码中调用的ADO类要在这些文件中定义。 <BR><BR> 程序的第三行指示ADO对象不使用名称空间。在有些应用程序中,由于应用程序中的对象与ADO中的对象之间可能会出现命名冲突,所以有必要使用名称空间。如果要使用名称空间,则可把第三行程序修改为: rename_namespace("AdoNS")。第四行代码将ADO中的EOF(文件结束)更名为adoEOF,以避免与定义了自己的EOF的其他库冲突。 <BR><BR> 3.利用智能指针进行数据库操作 <BR><BR> 在CaboutDlg头文件中定义两个ADO智能指针类实例,并在对话框中加入一个ListCtrl。 <BR><BR>_ConnectionPtr m_pConnection; <BR><BR>_RecordsetPtr m_pRecordset; <BR><BR> ClistCtrl m_List; <BR><BR> ADO库包含三个智能指针:_ConnectionPtr、_CommandPtr和_RecordsetPtr。 <BR><BR>_ConnectionPtr通常被用来创建一个数据连接或执行一条不返回任何结果的SQL语句,如一个存储过程。 <BR><BR>_CommandPtr返回一个记录集。它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。在使用_CommandPtr接口时,可以利用全局_ConnectionPtr接口,也可以在_CommandPtr接口里直接使用连接串。 <BR><BR>_RecordsetPtr是一个记录集对象。与以上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定、游标控制等。 <BR><BR> 在OnInitDialog()中加入以下代码: <BR><BR> BOOL CAboutDlg::OnInitDialog() <BR><BR> { <BR><BR>CDialog::OnInitDialog(); <BR><BR>_variant_t TheValue; <BR><BR>m_List.ResetContent(); <BR><BR> m_pConnection.CreateInstance(_uuidof(Connection)); <BR><BR> m_pRecordset.CreateInstance(_uuidof(Recordset)); <BR><BR> try{ <BR><BR>m_pConnection->Open("DSN=ADOTest","","",0); //连接叫作ADOTest的ODBC数据源 <BR><BR>m_pRecordset->Open("SELECT * FROM BlockDefine",(IDispatch*)m_pConnection, <BR>adOpenDynamic,<BR>adLockOptimistic,<BR>adCmdText); <BR><BR> //执行SQL语句得到一个记录集 <BR><BR> while(!m_pRecordset->adoEOF) <BR><BR> //遍历所有记录 <BR><BR> { <BR><BR> TheValue = m_pRecordset->GetCollect("BlockIndex");<BR><BR> //得到字段BlockIndex的值 <BR><BR> if(TheValue.vt!=VT_NULL) <BR><BR> m_List.AddString((char*)_bstr_t(TheValue)); //将该值加入到列表控件中 <BR><BR> m_pRecordset->MoveNext(); <BR><BR> } <BR><BR> m_pRecordset->Close(); <BR><BR>m_pConnection->Close(); <BR><BR> } <BR><BR> catch(_com_error e) //异常处理 <BR><BR> { <BR><BR>AfxMessageBox(e->ErrorMessage()); <BR><BR> } <BR><BR> m_pRecordset = NULL; <BR><BR>m_pConnection = NULL; <BR><BR> return TRUE; // return TRUE unless you set the focus to a control <BR><BR> } <BR><BR> 程序中通过_variant_t和_bstr_t转换COM对象和C++类型的数据, _variant_t类封装了OLE自治VARIANT数据类型。在C++中使用_variant_t类要比直接使用VARIANT数据类型容易得多。 <BR><BR> 好,编译后该程序就能运行了,但记住运行前要创建一个叫ADOTest的ODBC数据源。该程序将把表BlockDefine中的BlockIndex字段值显示在列表控件中。</TD></TR></TBODY></TABLE><br><br>
</DIV></div></div>
<script src='../../../get_readnum.asp?id=
4477
'></script>
</center></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -