直接通过ADO操作ACCESS数据库
- 格式:pdf
- 大小:243.44 KB
- 文档页数:6
ASP与网络数据库学习报告学院:专业:姓名:学号:成绩:二0一 0 年十一月用ADO对象访问Access数据库的方法ADO称为“Active数据对象”,是基于组件的数据库编程接口。
ADO实际是一种提供访问各种数据类型的连接机制,是一个与编程语言无关的COM(Component Object Model)组件系统。
ADO设计为一种极简单的格式,可以方便地连接任何符合ODBC标准的数据库。
在数据库的应用中,使用ADO编写的应用程序可以存取Internet任何地方的数据。
而我们通常用ADO的Connection对象、Command对象、Recordset对象来创建数据库。
而Acesss 数据库是目前应用比较广泛的桌面型数据库,广泛应用于各种小型管理信息系统中。
现在我们就来创建一个“网上留言”数据库以详细理解用ADO对象访问Access数据库的方法。
一、创建背景随着internet在中国的迅速发展,人们日常生活中越来越多地使用新技术来为自己的工作和学习服务。
在众多Internet关联功能中,有一项新的业务正成为所有用户所津津乐道的交流方式,这就是网上留言。
根据调查现在网民使用现状,网上留言板的使用百分比居前列。
二、数据库设计:1.首先创建一个Access 2003数据库为onlineword.mdb,分别设计以下两个表:reply表:字段名意义字段类型reid 回复者信息主键数字reply 回复者留言内容文字retime 留言时间日期leave表:字段名意义字段类型Id 留言者信息主键数字name 留言者姓名文字sex 性别文字ip ip地址数字os 操作系统文字qq qq号数字mail 邮箱地址数字addtime 添加时间日期body 留言内容文字ie ie类型文字2.建一个文件conn.asp用于链接打开当前目录下的onlineword.mdb数据库。
代码如下:<% set conn=server.createobject("ADODB.Connection")Conn.open"Provider=Mcorosoft.jet.oledb.4.0;Data Source="& server.MapPath("onlineword.mdb")%>3.用connection对象在数据库的reply表中添加一条记录(插入语句),建一个文件:insert.asp代码如下:<!--include file="conn.asp"--><% sql1="insert into reply( reid,reply,retime) values(‘1’,’谢;谢’,’10/11/12’)"conn.execute.sql1conn.closeset.conn=nothing%>4.用对象显示表中记录,在当前目录下,建一个show.asp文件,代码如下:<!--include file="conn.asp"--><% set rec=server.CreateObject("ADODB.RecordSet")Sql2="select * from reply where reid="& rs("id")' & " order by reid desc"rec.open sql2,conn,1,1%><table width="100%"><% do while not rec.eof %><tr><td><%=rs(reid) %></td></tr><tr><td><%=rs(reply) %></td></tr><tr><td><%=rs(retime) %></td></tr><% rec.movenextwendrec.closeset rec=nothing%></table>三、其他操作打开管理员回复信息数据库,开始调用其中内容。
vc++中使用ado方式操作access数据库ADO(ActiveX Data Object)是Microsoft数据库应用程序开发的新接口,是建立在OLE DB之上的高层数据库访问技术,即使你对OLE DB,COM不了解也能轻松对付ADO,因为它非常简单易用,甚至比你以往所接触的ODBC API、DAO、RDO都要容易使用,并不失灵活性。
本文详细地介绍在Visual C++开发环境下如何使用ADO来进行数据库应用程序开发,并给出示例代码。
为了使读者朋友都能测试本例提供的代码,我们采用Access数据库,您可以直接在我们提供的示例代码中找到这个test.mdb。
程序编译运行后的效果如图一所示图一、ADO操作ACESS数据库的界面效果图一、实现方法万事开头难,任何一种新技术对于初学者来说最重要的还是"入门",掌握其要点。
让我们来看看ADO数据库开发的基本流程吧!它的基本步骤如下:(1)初始化COM库,引入ADO库定义文件(2)用Connection对象连接数据库(3)利用建立好的连接,通过Connection、Command对象执行SQL命令,或利用Recordset对象取得结果记录集进行查询、处理。
(4)使用完毕后关闭连接释放对象。
下面我们将详细介绍上述步骤并给出相关代码。
1、COM库的初始化我们可以使用AfxOleInit()来初始化COM库,这项工作通常在CWinApp::InitInstance()的重载函数中完成,请看如下代码:BOOL CADOTest1App::InitInstance(){AfxOleInit();......}2、用#import指令引入ADO类型库为了引入ADO类型库,需要在项目的stdafx.h文件中加入如下语句:#import "c:program filescommon filessystemadomsado15.dll"no_namespace rename("EOF","adoEOF")这一语句有何作用呢?其最终作用同我们已经十分熟悉的#include类似,编译的时候系统会为我们生成msado15.tlh,ado15.tli两个C++头文件来定义ADO库。
ADO对象操作Access数据库关键技术ADO对象操作Access数据库关键技术ADO(ActiveX Data Object)是目前Microsoft通用的数据访问技术。
ADO编程模型定义一组对象,用于访问和更新数据源,它提供了一系列方法完成以下任务:连接数据源、查询记录、添加记录、更新记录、删除记录、检查建立连接或执行命令时可能产生的错误。
一、ADO对象ADO是基于组件的数据库访问接口,可以来自多种数据提供者的数据进行读取和写入操作。
ADO的3个成员对象:(1)Connection对象(连接对象):建立应用程序与数据源的连接。
(2)Command对象(操作命令对象):在创建数据连接的基础上,利用Command 对象可以实现对数据源的查询、插入、删除、编辑修改及更新操作。
(3)Recordset对象(记录集对象):执行数据访问或SQL命令得到动态记录集,它被缓存在内存中。
ADO的3个集合对象:(1)Errors集合对象。
它依赖于Connection对象的使用。
(2)Parameters集合对象。
它依赖于Command对象的使用。
(3)Fields集合对象。
它依赖于Recordset对象的使用。
1、Connection对象该对象用来实现应用程序与数据源的连接。
只有连接成功后,Command对象和Recordset对象才能访问某个数据库。
2、Command对象该对象主要作用是在VBA中用SQL语句访问、查询数据库中的数据,可以完成Recordset对象不能完成的操作,如创建表、修改表结构、删除表、将查询结果保存为新表等。
3、Recordset对象Recordset对象的功能最常用、最重要,它可以访问表和查询对象,返回的记录存储在Recordset对象中。
通过该对象可以浏览记录、修改记录、添加新记录或者删除特定记录。
二、在Access中引用ADO对象在Access的模块设计时要想使用ADO对象,首先应该增加一个对ADO库的引用。
VC++使用ADO开发ACCESS数据库本文通过实例演示如何在VC++中使用ADO进行ACCESS数据库编程,并对涉及到的几个概念进行详细解释。
本文不对ADO和ACCESS的基本概念进行详细解释,主要包括以下内容:第一部分 ADO和ADOX到底是什么,二者的作用和区别建立数据库第二部分 ADOX创建ACCESS数据库第三部分ADO创建ACCESS数据库的表第四部分使用_ConnectionPtr接口开发ACCESS数据库第五部分使用_RecordsetPtr接口开发ACCESS数据库第一部分ADO和ADOX到底是什么,二者的作用和区别ADO是Microsoft 最新推出的数据库访问的高层软件接口。
它和Microsoft 以前的数据库访问接口DAO、RDO相比具有更大的灵活性,使用也更方便,开发效率大为提高。
ADOX是核心ADO对象的扩展库。
它提供的附加对象可用于创建、修改和删除模式对象,如表和过程。
要使用ADOX,则应建立对ADOX类型库的引用。
ADOX 库文件名为 Msadox.dll。
通俗地讲,ADO是访问数据库的一种接口,可以使用它方便地进行数据库编程。
而ADOX是微软对ADO功能的扩展,比如:可以ADOX创建数据库(而ADO 没有创建数据库的功能)。
第二部分ADOX创建ACCESS数据库用ADOX创建access数据库方法很简单,只需要创建一个Catalog对象,然后调用它的Create方法就可以了。
例程ADOXCreateDatabase演示如何使用ADOX创建一个ACCESS数据库。
打开VC++ 6.0,新建一个基于对话框的工程ADOXCreateDatabase。
在对话框IDD_ADOXCREATEDATABASE_DIALOG中添加一个编辑框IDC_DBNAME和一个按钮IDC_BTN_CREATE,编辑框用以输入数据库名称。
使用ClassWizard给编辑框创建一个CString变量m_dbName。
MFC使用ADO读写Access数据库实例ADO(ActiveX Data Object)是Microsoft数据库应用程序开发的新接口,是建立在OLE D B之上的高层数据库访问技术,即使你对OLE DB,COM不了解也能轻松对付ADO,因为它非常简单易用,甚至比你以往所接触的ODBC API、DAO、RDO都要容易使用,并不失灵活性。
本文详细地介绍在Visual C++开发环境下如何使用ADO来进行数据库应用程序开发,并给出示例代码。
为了使读者朋友都能测试本例提供的代码,我们采用Access数据库,您可以直接在我们提供的示例代码中找到这个test.mdb一、实现方法万事开头难,任何一种新技术对于初学者来说最重要的还是"入门",掌握其要点。
让我们来看看ADO数据库开发的基本流程吧!它的基本步骤如下:(1)初始化COM库,引入ADO库定义文件(2)用Connection对象连接数据库(3)利用建立好的连接,通过Connection、Command对象执行SQL命令,或利用Recordset对象取得结果记录集进行查询、处理。
(4)使用完毕后关闭连接释放对象。
下面我们将详细介绍上述步骤并给出相关代码。
1、COM库的初始化我们可以使用AfxOleInit()来初始化COM库,这项工作通常在CWinApp::I nitInstance()的重载函数中完成,请看如下代码:2、用#import指令引入ADO类型库为了引入ADO类型库,需要在项目的stdafx.h文件中加入如下语句:这一语句有何作用呢?其最终作用同我们已经十分熟悉的#include类似,编译的时候系统会为我们生成msado15.tlh,ado15.tli两个C++头文件来定义ADO库。
需要读者朋友注意的是:您的开发环境中msado15.dll不一定在这个目录下,请按实际情况修改;在编译的时候可能会出现如下警告,对此微软在MSDN中作了说明,并建议我们不要理会这个警告:msado15.tlh(405) : warning C4146: unary minus operator appli ed to unsigned type, result still unsigned。
VB利用ADO控件连接access数据库今天告诉大家VB利用ADO控件连接access数据库的两种方法:一种是在 adodc1的属性里设置数据库文件的路径,这种方法的优点是简单易操作,缺点是,当源文件换了地方后,要重新设置数据库的路径,否则连接不上数据库了。
一种是用代码设置数据库的路径,这种方法的优点就是只要源文件和数据库在同一文件夹下,无论移动到哪里都能连接上。
如果没有建立好数据库的话,先建立一个数据库,然后建立一个表比如我们建的表名为message,然后把里面的字段名称和数据类型都按自己的需要设置好.然后保存就可以了.打开Microsoft Visual Basic6.0 我用的是VB6.0,在需要调用数据库的窗体上加入一个adodc控件,默认名称为:Adodc1。
默认的情况下工具栏里是没有这个控件的,可以打开工程---部件(快捷键CTRL+T),去掉只显示选定项的勾,然后勾上Microsoft ADO Data Control(OLEDB),然后确定,工具栏就会多了一个adodc的控件。
第一种方法:设置adodc1的属以连接数据库.在adodc1控件上右键--Adodc属性--使用连接字符串--生成--Microsoft Jet 4.0 OLE DB Provider--下一步--选择或输入数据库名称---找到要连接的数据库后,确定.然后记录源设置属性. 如果要把内容提交到数据库一般使用adCmdTable. 表选择要连接的表。
设置完毕后就可以了.如果我们想把内容提交到数据库.举个例子..在窗体建立一个文本框,设置属性中的DataSource为adodc1 DataField为要连接的数据库的字段名。
如果数据库中有字段,会让你选择。
设置好后在窗体加一个添加记录和一个提交的按钮,设置代码:Private Sub Command1_Click() Adodc1.Recordset.Update '保存Adodc1.Refresh '刷新End Sub添加按钮代码:Private Sub Command2_Click() Adodc1.Recordset.AddNew '添加新纪录Adodc1.Recordset("姓名").Value = Text1.Text End Sub第二种方法:在窗体添加Adodc控件一个text控件一个添加记录按钮一个提交按钮在窗体设置代码:Private Sub Form_Load()Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + App.Path + "\db1.mdb;Persist Security Info=False" '设置数据库路径mandType = adCmdText '设置记录源Adodc1.RecordSource = "select * from message" '连接数据库的message 表文件Set Text1.DataSource = Adodc1 text1.DataField = "姓名"End Sub添加记录按钮代码:Private Sub Command1_Click() Adodc1.Recordset.AddNew '添加新纪录End Sub提交代码:Private Sub Command2_Click() Adodc1.Recordset.Update '保存Adodc1.Refresh '刷新End Sub好了连接方法讲完了,我都在机子上测试过了,因该没有什么问题的。
Visual C++环境下ADO控件访问数据库DBGrid数据表格控件以其短小精悍而深受大家的喜爱,但其如何在Visual C++中使用却很少有文章提及,本文将VC下使用DBGrid的具体步骤简要地介绍给大家。
一.前期准备为了实现DBGrid控件的自动捆绑,我们需要建立一个数据库和与之关联的数据源,本例中我们用Access建立数据库mydata.mdb,在数据库中新建一张表users,包含三个字段username,address,email,并输入多条记录。
在控制面板ODBC数据源中建立名称为test的系统DSN(注意是系统DNS非用户DNS),并将其指向mydata.mdb二.创建工程新建一个基于对话框的MFC AppWizard (exe)工程,取名为GridTest,并在AppWizard的第2步中确认已经提供ActiveX控件支持。
三.插入控件我们需要插入Microsoft RemoteData Control与DBGrid Control两个控件,方法如下:1)选择菜单->Project->Add to Project->Components and Controls Gallery2)在部件选择对话框中进入Registered ActiveX Controls3)选择Microsoft RemoteData Control ,单击Insert按钮,确认后对类进行配置(可以按默认),我们不做任何修改单击OK按钮,插入完成。
以同样的步骤,插入DBGrid Control控件。
4)回到VC工作区,我们在ResourceView中选择GridTest对话框模板(即ID号为IDD_GRIDTEST_DIALOG的对话框模板)此时我们发现在Controls工具条中已经新增了两个按钮,分别表示刚才插入的两个控件。
5)现在我们在模板中画出这两个控件,如图所示:四.更改控件属性鼠标右键单击RemoteData Control控件,在右键菜单中选择Properties,弹出属性对话框,在Control选项卡中选择数据源test,在SQL中输入SQL语句例如:select * from users如下图所示:用同样的方法我们打开DBGrid控件的属性对话框。
如何获取ADO连接Accesss数据库的字符串的方法以及使用DATAGRID控件后软件提示cannot initialize databindings的解决1. 新建一个文本文件“ado.txt”,重命名为“ado。
udl”注1。
1:ado。
udl也可以通过别的方式得到,但必须是0字节的文件.注1。
2:系统文件没有扩展名,XP资源管理器中,菜单“工具"-—〉“文件夹选项"-->“查看”-->“隐藏已知文件类型的扩展名",前面的勾去掉就行了。
2. 双击这个0字节的ado。
udl文件,会打开“数据链接属性"对话框3. 在“数据链接属性”对话框“提供程序”属性页中选择你要使用连接数据库的驱动程序我们以连接Access2003数据库为例,如下图注3。
1:该图中会根据本机所安装的数据库驱动不同而略有不同.4。
点击“下一步”,来到“连接”属性页中,在该页中我们需要根据上一步选择的数据库驱动,该页会各不同,但大致还是有很多相同的地方.我们选择的是Access2003的数据库文件,由于“ado。
udl”和数据库文件“Demo。
mdb”在同一个目录,我们直接把该文件名写上即可。
这里我们选择好了,可以点击“测试连接”,测试现在是否能连接上数据库,如下图注4.1:最好是使用相对路径,否则会在软件发布的时候造成找不到该文件。
注4.2:在C语言中涉及到转义字符,路径中请注意把“\”换成“\\"注4.3:连接网络数据库的时候最好把“允许保存密码”前面的勾选上,并写上正确的数据库的“用户名称”和“密码”,否则会在程序中因为连接字符串中未提供数据库连接密码而产生连接失败的情况。
5. 在“高级”属性页中我们可以设置数据库的一些其他设置,如数据库访问权限,如下图6. 在“所有”属性页中,我们还可以对刚才进行的选择进行编辑和编辑其它的一些附加参数,如下图7。
“确定”关闭“数据链接属性"对话框,选择完成了,用记事本打开“ado.udl”文件,如下图注7。
使用ADO操作Access数据库ADO对象1、Access内嵌的VBA是用ADO技术开发数据库应用的主要工具,ADO是目前Microsoft通用的数据访问技术;2、ADO对象模型包括:Connection、Recordset、Record、Command、Parameter、Field、Property、Stream、Error九个对象;3、主要的ADO对象介绍:1)Connection对象:ADO对象模型中的最高级对象,用来实现应用程序与数据源的连接;2)Command对象:主要在VBA中使用SQL语句访问、查询和修改数据库中的数据,实现Recordset对象无法实现的操作(数据表级别的操作),可以使用DoCmd代替;3)Recordset对象:ADO最为常用的、重要的对象,可以访问表和查询对象,返回的记录储存在Recorderset对象中,主要执行的操作:①查询数据表中的数据;②在数据表中添加数据;③更新数据表中的数据;④删除数据表中的特定数据;在Access中引用ADO对象1、Access引用ADO的步骤:①声明、初始化Connection对象;②创建Recordset对象,编程完成各种操作;③关闭ADO对象;2、声明、初始化Connection对象'声明Connection对象:一般使用cn做为变量的命名前缀;Dim coName As ADODB.Connection'初始化Connection对象,连接当前数据库;Set cnName = CurrentProject.Connection3、声明和打开Recordset对象1)声明、初始化Recordset对象Dim rsName As ADODB.Recoresetset rsName = new ADODB.Recordset2)打开一个Recordset对象使用Recordset的Open方法可以打开数据表、查询对象、或直接引用SQL查询语句4、关闭Recordset和Connection对象rsName.ClosecnName.CloseSet rsName = NothingSet cnName = Nothing通过Recordset对象引用记录字段1、引用字段的方法有2种:直接在记录集对象中引用字段名称;使用记录集对象的Fields(n)属性引用;Code = rsName!字段名'引用该字段的第一条记录Code = rsName.Field(n)'引用该字段的第n条记录,n从0开始,可以用循环输出需要量的记录2、如果记录集字段包含空格、或者是一个保留字,则引用时必须将该字段用 [ ] 括起来;通过Recordset对象浏览记录1.Recordset记录集对象提供了4种方法浏览记录2、BOF、EOF属性分别记录指针是否在文件开始、文件末尾;如果记录集指针指向某记录时,BOF和EOF都为false;'添加一个窗体部件的按钮事件:浏览下一条记录Priavte Sub ComomndNext_Click()rsDemo.MoveNextIf rsDemo。
VC++使用ADO开发ACCESS数据库VC++使用ADO开发ACCESS数据库本文通过实例演示如何在VC++中使用ADO进行ACCESS数据库编程,并对涉及到的几个概念进行详细解释。
本文不对ADO和ACCESS的基本概念进行详细解释,主要包括以下内容:第一部分 ADO和ADOX到底是什么,二者的作用和区别建立数据库第二部分 ADOX创建ACCESS数据库第三部分ADO创建ACCESS数据库的表第四部分使用_ConnectionPtr接口开发ACCESS数据库第五部分使用_RecordsetPtr接口开发ACCESS数据库第一部分ADO和ADOX到底是什么,二者的作用和区别ADO是Microsoft 最新推出的数据库访问的高层软件接口。
它和Microsoft 以前的数据库访问接口DAO、RDO相比具有更大的灵活性,使用也更方便,开发效率大为提高。
ADOX是核心ADO对象的扩展库。
它提供的附加对象可用于创建、修改和删除模式对象,如表和过程。
要使用ADOX,则应建立对ADOX类型库的引用。
ADOX 库文件名为 Msadox.dll。
通俗地讲,ADO是访问数据库的一种接口,可以使用它方便地进行数据库编程。
而ADOX是微软对ADO功能的扩展,比如:可以ADOX创建数据库(而ADO 没有创建数据库的功能)。
第二部分ADOX创建ACCESS数据库用ADOX创建access数据库方法很简单,只需要创建一个Catalog对象,然后调用它的Create方法就可以了。
例程ADOXCreateDatabase演示如何使用ADOX创建一个ACCESS数据库。
打开VC++ 6.0,新建一个基于对话框的工程ADOXCreateDatabase。
在对话框IDD_ADOXCREATEDATABASE_DIALOG中添加一个编辑框IDC_DBNAME和一个按钮IDC_BTN_CREATE,编辑框用以输入数据库名称。
使用ClassWizard给编辑框创建一个CString变量m_dbName。
VC++中使用ADO方式操作ACCESS数据库ADO(ActiveX Data Object)是Microsoft数据库应用程序开发的新接口,是建立在OLE DB之上的高层数据库访问技术,即使你对OLE DB,COM不了解也能轻松对付ADO,因为它非常简单易用,甚至比你以往所接触的ODBC API、DAO、RDO都要容易使用,并不失灵活性。
本文详细地介绍在Visual C++开发环境下如何使用ADO来进行数据库应用程序开发,并给出示例代码。
为了使读者朋友都能测试本例提供的代码,我们采用Access数据库,您可以直接在我们提供的示例代码中找到这个test.mdb。
程序编译运行后的效果如图一所示:图一、ADO操作ACESS数据库的界面效果图一、实现方法万事开头难,任何一种新技术对于初学者来说最重要的还是"入门",掌握其要点。
让我们来看看ADO 数据库开发的基本流程吧!它的基本步骤如下:(1)初始化COM库,引入ADO库定义文件(2)用Connection对象连接数据库(3)利用建立好的连接,通过Connection、Command对象执行SQL命令,或利用Recordset对象取得结果记录集进行查询、处理。
(4)使用完毕后关闭连接释放对象。
下面我们将详细介绍上述步骤并给出相关代码。
1、COM库的初始化我们可以使用AfxOleInit()来初始化COM库,这项工作通常在CWinApp::InitInstance()的重载函数中完成,请看如下代码:BOOL CADOTest1App::InitInstance(){AfxOleInit();......}2、用#import指令引入ADO类型库为了引入ADO类型库,需要在项目的stdafx.h文件中加入如下语句:#import "c:program filescommon filessystemadomsado15.dll"no_namespace rename("EOF","adoEOF")这一语句有何作用呢?其最终作用同我们已经十分熟悉的#include类似,编译的时候系统会为我们生成msado15.tlh,ado15.tli两个C++头文件来定义ADO库。
VC++中使用ADO方式操作ACCESS数据库用SQL创建数据库首先说说怎么用SQL语句创建数据库,创建数据库的语句有如下几种:1. CREATE TABLE(创建新表)2. CREATE INDEX(增加索引)3. DROP INDEX(删除索引)4. CONSTRAINT(约束语句)5. ALTER TABLE(修改表)6. DROP TABLE(删除表)CREATE TABLE语句:在数据库中生成新表,表中字段的类型可以为:INTEGER(整型)、LONG(长整型)、SINGLE (单精度浮点数)、DOUBLE(双精度浮点数)、DA TETIME(日期型,也可以写成DA TE)、BIT(布尔型)、TEXT(字符串型,最大255个字节)、MEMO(字符串型,最大可达1.2G 字节)、COUNTER(自动递增长整型,可确定记录的唯一性)、CURRENCY(货币型,精确到小数点左边15位,右边4位)、BINARY(字节型,最大255个)、LONGBINARY(用于OLE 对象)、GUID(全局唯一标识符)。
生成表NewTable,该表有文本字段Field1和整型字段Field2,表名和字段名可以随便你取,不区分大小写,但是,有些保留字不能用作表名字段名,比如NumberCREATE TABLE NewTable (Field1 INTEGER ,Field2 TEXT);CREATE [ UNIQUE ] INDEX indexON table (field [ASC|DESC][, field [ASC|DESC], ...])[WITH { PRIMARY | DISALLOW NULL | IGNORE NULL }]CREATE INDEX 语句说明:index:要创建的索引的名称。
table:将包含索引的现有表的名称。
field :要进行索引的字段的名称。
若要创建单字段索引,请在表名后的括号中列出字段名。
1.设置数据源打开控制面板--->系统和安全--->管理工具--->ODBC Data Sources(32 bit)这里需要注意的是,vc6.0是32位的,因此这里的数据源也必须是32位的,否则是连接不上的,这里我使用的是ACCESS数据库,数据源的配置如下:2.创建包含数据库的MFC对话框(其它也可以)工程,新建ADOConn类在工程中我们需要新建一个普通类ADOConn然后在ADOConn类头文件中加入以下导入声明和变量、函数声明:ADOConn.h---------------------------------------------------------------------------------#import "c:\Program Files\Common Files\System\ado\msado15.dll"no_namespace rename("EOF","adoEOF")//引入ADO库文件public:_ConnectionPtr m_pConnection;//连接对象指针_RecordsetPtr m_pRecordset;//记录集对象指针_CommandPtr m_pCommand;//命令对象指针ADOConn();virtual ~ADOConn();BOOL OnInitADOConn(CString Connstr);//初始化连接数据库BOOL ExecuteSQL(CString strSQL);//执行SQL语句BOOL ExecuteProc(CString ProcName);//执行存储过程BOOL GetCollect(CString FieldName,CString & strDest);//获得某个字段的值 BOOL GetRecordSet(CString strSQL);//获得记录集int GetRecordCount();//获得记录数//判断表TableName中是否存在字段KeyName的值为KeyValue的记录 BOOL RecordExist(CString TableName,CString KeyName,CString KeyValue); BOOL MoveFirst();//移动到第一条记录BOOL MoveNext();//移动到下一条记录BOOL Close();//关闭记录集BOOL CloseADOConnection();//关闭连接void dump_com_error(_com_error &e);//错误详细信息ADOConn.h---------------------------------------------------------------------------------然后在ADOConn类源文件中加入函数实现:ADOConn.cpp---------------------------------------------------------------------------------ADOConn::ADOConn()//构造函数{}ADOConn::~ADOConn()//析构函数{}BOOL ADOConn::OnInitADOConn(CString ConnStr)//初始化连接数据库{try{m_pRecordset.CreateInstance("ADODB.Recordest");m_pCommand.CreateInstance("mand");m_pConnection.CreateInstance("ADODB.Connection");_bstr_t strConnect=(_bstr_t)ConnStr;m_pConnection->Open((_bstr_t)strConnect,"","",adModeUnknown);AfxMessageBox("数据库连接成功");return true;}catch(_com_error e){AfxMessageBox("数据库连接失败");return false;}}BOOL ADOConn::ExecuteSQL(CString strSQL)//执行SQL语句{try{m_pConnection->BeginTrans();m_pConnection->Execute(_bstr_t(strSQL),NULL,adCmdText);m_pConnection->CommitTrans();return true;}catch(_com_error e){m_pConnection->RollbackTrans();AfxMessageBox("执行SQL语句失败");return false;}}BOOL ADOConn::ExecuteProc(CString ProcName)//执行存储过程{m_pCommand->ActiveConnection=m_pConnection;m_pCommand->CommandText=_bstr_t(ProcName);m_pCommand->Execute(NULL,NULL,adCmdStoredProc);return true;}catch(_com_error e){AfxMessageBox("执行存储过程失败");return false;}}BOOL ADOConn::GetCollect(CString FieldName,CString & strDest)//获得某个字段的值{VARIANT vt;try{vt=m_pRecordset->GetCollect(_variant_t(FieldName));switch(vt.vt){case VT_BSTR:strDest=(LPCSTR)_bstr_t(vt);break;case VT_DECIMAL:strDest.Format("%d",vt.intVal);break;case VT_DATE:{DATE dt=vt.date;COleDateTime da=COleDateTime(dt);strDest.Format("%d-%d-%d %d: %d: %d",da.GetYear(),da.GetMonth(),da. GetDay(),da.GetHour(),da.GetMinute(),da.GetSecond());break;}case VT_NULL:strDest="";break;}return true;}catch(_com_error e){AfxMessageBox(e.ErrorMessage());return false;}return true;}BOOL ADOConn::GetRecordSet(CString strSQL)//获得记录集{m_pCommand->CommandText=(_bstr_t)strSQL;m_pCommand->ActiveConnection=m_pConnection;m_pCommand->CommandType=adCmdText;m_pRecordset=m_pCommand->Execute(NULL,NULL,adCmdText);return true;}catch(_com_error e){AfxMessageBox("执行select语句失败");return false;}}int ADOConn::GetRecordCount()//获得记录数{DWORD nRows = 0;nRows=m_pRecordset->GetRecordCount();if(nRows==-1){nRows=0;if(m_pRecordset->adoEOF!=VARIANT_TRUE) m_pRecordset->MoveFirst();while(m_pRecordset->adoEOF!=VARIANT_TRUE){nRows++;m_pRecordset->MoveNext();}if(nRows>0)m_pRecordset->MoveFirst();}return nRows;}//判断表TableName中是否存在字段KeyName的值为KeyValue的记录BOOL ADOConn::RecordExist(CString TableName,CString KeyName,CString KeyValue) {CString countstr;countstr="select * from "+TableName+"where"+KeyName+"=\'"+KeyValue+"\'"; BOOL ret =GetRecordSet(countstr);if(ret){int ret2=GetRecordCount();if(ret2) return true;else return false;}else return false;}BOOL ADOConn::MoveFirst()//移动到第一条记录{try{m_pRecordset->MoveFirst();return true;}catch(_com_error e){AfxMessageBox("结果集移到第一个失败");return false;}}BOOL ADOConn::MoveNext()//移动到下一条记录{try{m_pRecordset->MoveNext();return true;}catch(_com_error e){AfxMessageBox("结果集移到下一个失败");return false;}}BOOL ADOConn::Close()//关闭记录集{try{m_pRecordset->Close();return true;}catch(_com_error e){AfxMessageBox("关系结果集失败");return false;}}BOOL ADOConn::CloseADOConnection()//关闭连接{try{if(m_pConnection->State){m_pConnection->Close();m_pConnection=NULL;return true;}else{AfxMessageBox("关闭数据库失败");return false;}}catch(_com_error e){AfxMessageBox("关闭数据库失败");return false;}}void ADOConn::dump_com_error(_com_error &e) //错误详细信息{CString ErrorStr;_bstr_t bstrSource(e.Source());_bstr_t bstrDescription(e.Description());ErrorStr.Format( "/n/tADO Error/n/tCode = %08lx/n/tCode meaning= %s/n/tSource = %s/n/tDescription = %s/n/n",e.Error(), e.ErrorMessage(), (LPCTSTR)bstrSource,(LPCTSTR)bstrDescription );//在调试窗口中打印错误信息,在Release版中可用DBGView查看错误信息::OutputDebugString((LPCTSTR)ErrorStr);#ifdef _DEBUGAfxMessageBox(ErrorStr, MB_OK | MB_ICONERROR);#endif}ADOConn.cpp---------------------------------------------------------------------------------3.编写代码连接数据库(这里我用的是ACCESS数据库)这里我们可以在任意.CPP(源文件)中声明ADOConn ado;然后在其他.CPP中使用的时候,只需要在头部加上extern ADOConn ado;当然,在定义的类中同样可以使用,举例如下:然后进行连接数据库的代码如下://进行数据库连接if(!AfxOleInit()){AfxMessageBox("OLE initialzation failed");return FALSE;}CString str="DSN=rapidquery";//这个字符串中的rapidquery就是我们之前设置的数据源的名称ado.OnInitADOConn(str);//调用dao对象去连接数据库,连接成功会提示,连接失败也会提示。
准备工作
(1)、引入ADO类
(2)、初始化COM
(3)#import 包含后就可以用3个智能指针了:_ConnectionPtr、_RecordsetPtr和_CommandPtr 1.连接和关闭数据库
(1)连接
(2)、关闭
(3)、设置连接时间
2.打开一个结果集
(1)打开,首先创建一个_RecordsetPtr实例,然后调用Open()得到一条SQL语句的执行结果
(2)关闭结果集
3.操作一个结果集
(1)、遍历(读取)
a)、用pRecordset->adoEOF来判断数据库指针是否已经移到结果集的末尾了;m_pRecordset->BOF判断是否在第一条记录前面:
b)、取得一个字段的值的办法有两种办法
一是
二是
(2)、添加
1.调用m_pRecordset->AddNew();
2.调用m_pRecordset->PutCollect();给每个字段赋值
3.调用m_pRecordset->Update();确认
(3)、修改
(4)、删除
a)、把记录指针移动到要删除的记录上,然后调用
4.直接执行SQL语句,除了要用到结果集其余的大部分功能都可以直接用SQL 语言实现
(1)、用_CommandPtr和_RecordsetPtr配合
(2)、直接用_ConnectionPtr执行SQL语句
其中CommandText是命令字串,通常是SQL命令。
参数RecordsAffected是操作完成后所影响的行数,
参数Options表示CommandText中内容的类型,Options可以取如下值之一:
•adCmdText:表明CommandText是文本命令
•adCmdTable:表明CommandText是一个表名
•adCmdProc:表明CommandText是一个存储过程
•adCmdUnknown:未知
5.调用存储过程
(1)、利用_CommandPtr
(2)、直接用_ConnectionPtr直接调用(见4.(2))
6.遍历数据库中的所有表名
7.遍历一个表中的所有字段
附:
1、_variant_t
(1)、一般传给这3个指针的值都不是MFC直接支持的数据类型,而要用_variant_t转换一下
_variant_t(XX)可以把大多数类型的变量转换成适合的类型传入
(2)、_variant_t var;
_variant_t -> long: (long)var;
_variant_t -> CString: CString strValue = (LPCSTR)_bstr_t(var);
CString -> _variant_t: _variant_t(strSql);
2、BSTR宽字符串与CString相互转换
BSTR bstr;
CString strSql;
CString -> BSTR: bstr = strSql.AllocSysString();
BSTR -> CString: strSql = (LPCSTR)bstr;
3、_bstr_t与CString相互转换
_bstr_t bstr;
CString strSql;
CString -> _bstr_t: bstr = (_bstr_t)strSql;
_bstr_t -> CString: strSql = (LPCSTR)bstr;
4、关于时间
Access:表示时间的字符串#2004-4-5#
Sql:表示时间的字符串''2004-4-5''
DateField(时间字段)
select * from my_table where DateField > #2004-4-10#
try
{
m_pCommand->CommandText = "INSERT INTO tTest(age) VALUES('23f2') ";
m_pRecordset = m_pCommand->Execute(NULL,NULL, adCmdText);
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败! 错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}。