《ado操作各类数据库.doc》由会员分享,可在线阅读,更多相关《ado操作各类数据库.doc(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、用ado操作各类数据库一、 用程序如何控制数据库关系型数据库实际上是一个包含了若干个二维记录集(表)的数据集合。用程序控制数据库的过程,实际上就是通过一个连接到数据库的指针,然后访问其中某一个二维记录集(表),从而进一步访问此记录集(表)的某个(些)数据,或者对此记录集(表)进行各种操作的过程。用示意图表示,就是:图1-1 用程序操作数据库过程下面分类进行说明。二、用ado操作access在程序中用ado操作数据库,根据实现的方法不同,大抵可以分为两类:l 完全由代码实现;l 使用数据库相关的控件来实现。下面分别说明。2.1完全由代码操作数据库的步骤完全由代码实现的、用ado操作任何一种数据库
2、,一般来说都要经过以下步骤:l 引入ado引擎,即把下面的语句添加到程序文件的头部:#import C:Program FilesCommon FilesSystemADOmsado15.dll rename_namespace(ADOCG) rename(EOF, adoEOF)using namespace ADOCG;l 在程序中定义几个数据库类型的变量,例如:_ConnectionPtrpCnn;/ 定义一个到数据库的连接指针,必须_RecordsetPtrpRec;/ 定义一个指向记录集(表)的指针,必须FieldsPtrpFlds;/ 定义一个指向字段的指针FieldPtrpFld
3、;/ 定义一个指向字段值的指针HRESULT hRes; / 创建数据库连接时返回的句柄,用于判断是否连接成功l 程序开始处调用CoUninitialize()函数,进行COM初始化调用:if FAILED(CoInitialize(NULL)CoUninitialize();l 创建Connection的对象,使用如下语句:hRes = pCnn.CreateInstance(ADODB.Connection);l 判断Connection的对象创建是否成功,如果成功,则打开数据库,代码如下:if( SUCCEEDED(hRes) )/ 连接数据库hRes = pCnn-Open( sUsr
4、ConStr, / 连接字符串, ,adModeUnknown);cout数据库连接成功!endlendl;elsecout数据库连接失败!endlExecute(“SELECT * FROM 内蒙古”,NULL, adCmdText );l 调用记录集对象的成员函数,就可以实现对表“内蒙古”的各种操作了。例如,若想提取表“内蒙古”的第一条记录的“北纬”字段的值,并赋给实型变量fLatitude,可以用如下语句:pRec-MoveFirst();/ 将指针移动到第一条记录处fLatitude = atof(LPCTSTR)(_bstr_t)pRec-GetCollect(北纬);/ 取数,赋值
5、l 对数据库的操作完成后,要关闭数据库:pCnn-Close();/ 关闭数据库2.2完全由代码操作access数据库实例上面所述为操作数据库的通用步骤,对于任何一种数据库都是适用的。那么,操作不同类型的数据库,例如access和SQLServer,上述步骤中哪些地方需要变动?只有一处:连接字符串。不同类型的数据库就是通过连接字符串来区分的。对于没有设置密码的access数据库,连接字符串是:Provider=Microsoft.Jet.OLEDB.4.0;Data Source=路径数据库名称;Persist Security Info=False;Jet OLEDB:Database设置了
6、密码的access数据库,最后一个字符串变成:Jet OLEDB:Database password=密码即在尾部加上:“空格password=密码”。下面通过一个实例来说明如何通过代码操作access数据库。本实例实现的功能是:用计算机通过“短信猫”收发短信。所涉及的硬件就是一个wavecom的短信猫,型号为Q2403A,还有一个充了话费的sim卡。把sim卡正确安装到短信猫内,再把短信猫连接到计算机串口上,然后接通电源,硬件就连接好了。有关短信猫的更多资料可以查阅有关资料,本文重点只是讨论开发此程序所用到的数据库。这个软件用到的数据库是:“创远短信历史记录”,它包含两个表,分别是“所有短信
7、”及“已删除短信”表。这两个表的结构是一样的,都包含6个字段,字段的情况如下表所示:字段名称数据类型说明序号长整型发信号码文本发信日期文本格式:#-#-#发信时间文本格式:#-#-#接收号码文本短信内容文本最多70个汉字,140个英文字符。表2-1建好数据库以后,运行vc+6,新建一个基于对话框的工程,工程名称为“GSMSMS”,在对话框上画出各个控件,然后命名、关联变量等。最后的对话框的界面如下图所示:图2-1在“ClassView”导航栏中双击“CGSMSMSDlg”类,打开GSMSMSDlg.h头文件,在头部添加如下代码:/ 引入ado数据库#import C:Program Files
8、Common FilesSystemADOmsado15.dll rename_namespace(ADOCG) rename(EOF, adoEOF)using namespace ADOCG;在CGSMSMSDlg类中定义如下与数据库有关的变量:private:/ 以下是数据库变量boolm_bDBIsOpen;/ 数据库是否连接成功intm_iColCnt,/ “所有短信”表的列数m_iColCnt2;/ “已删除短信”表的列数charm_sUsrConStr256;/ user connection stringHRESULT m_hRes;/ 句柄_ConnectionPtrm_pC
9、onn;/ 定义一个到数据库的连接_RecordsetPtrm_pRecSet,/ m_pRecSet2;/ 定义两个指向记录集(表)的指针FieldsPtrm_pFlds;/ 定义一个指向字段的指针FieldPtrm_pFld;/ 定义一个指向字段值的指针再添加两个成员函数:public:bool openAcc(char *sOpnAccMsg);/ 打开access数据库,参数为提示信息void closeAcc(char *sClsAccMsg);/ 关闭access数据库,参数为提示信息这两个函数的实现代码如下:/ 打开access数据库,参数为提示信息bool CGSMSMSDlg
10、:openAcc(char *sOpnAccMsg)char*sDbType = Provider=Microsoft.Jet.OLEDB.4.0;,/数据库类型*sDbPath = Data Source=.创远短信历史记录.mdb,/安全信息*sDbSec = ;Persist Security Info=False;Jet OLEDB:Database password=;sprintf(m_sUsrConStr,%s%s%s,sDbType,sDbPath,sDbSec);if FAILED(CoInitialize(NULL)CoUninitialize();/ COM 初始化调用t
11、ry/创建Connection对象m_hRes = m_pConn.CreateInstance(ADODB.Connection);if(SUCCEEDED(m_hRes)/连接数据库m_hRes = m_pConn-Open( (_bstr_t)m_sUsrConStr, ,/ 用户名 ,/ 密码,adModeUnknown);m_pRecSet.CreateInstance(ADODB.Recordset); / 创建记录集对象sprintf(sOpnAccMsg,数据库连接成功!n);returntrue;catch(_com_error e)/捕捉异常/ CString errorm
12、essage;/ errormessage.Format(连接数据库失败!rn错误信息:%s,e.ErrorMessage();/ AfxMessageBox(sErrMsg);/ charsErrMsg100;/DWORD dw = GetLastError();sprintf(sOpnAccMsg,连接数据库失败!rn错误信息:%s,e.ErrorMessage();return false;catch(.)DWORD dw = GetLastError();returntrue;/ 关闭access数据库,参数为提示字符串void CGSMSMSDlg:closeAcc(char *sC
13、lsAccMsg)/m_pRecSet-Close();/ 关闭记录集m_pConn-Close();/ 关闭数据库sprintf(sClsAccMsg,数据库已关闭);接下来,在对话框的初始化函数中添加打开数据库连接、初始化数据库变量的语句:/ 打开数据库if (m_bDBIsOpen = openAcc(sOpnAccMsg)/ 如果打开access数据库成功m_stc_dbName.SetWindowText(创远短信历史记录);/ 显示数据库名称else/ 打开access数据库失败AfxMessageBox(sOpnAccMsg);return FALSE;m_pRecSet.Cre
14、ateInstance(ADODB.Recordset);/ 初始化记录集m_pRecSet2.CreateInstance(ADODB.Recordset);/ 初始化记录集/ 使m_pRecSet指向“所有短信”表csSQL.Format(%s,select * from 所有短信);m_pConn-PutCursorLocation(adUseClient); /必须加上此句!m_pRecSet-Open(csSQL.AllocSysString(),m_pConn.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);m_
15、iColCnt = m_pRecSet-Fields-Count;/ 获得记录集的列数/ 使m_pRecSet2指向“已删除短信”表csSQL.Format(%s,select * from 已删除短信);m_pConn-PutCursorLocation(adUseClient); /必须加上此句!m_pRecSet2-Open(csSQL.AllocSysString(),m_pConn.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);m_iColCnt2 = m_pRecSet2-Fields-Count;/ 获得记录
16、集的列数程序退出时还需要关闭数据库,所以应该在对话框类的析构函数中添加关闭数据库的语句:m_pRecSet-Close();/ 关闭记录集m_pRecSet2-Close();/ 关闭记录集if(m_pConn-State=true)/ 数据库还处于连接状态m_pConn-Close();/ 关闭连接这样,一个通过ado访问access数据库的框架就搭建起来了,以后如果想在程序的任何地方访问此数据库,直接执行相应的SQL语句就可以了。例如,选中“已收到的短信”单选按钮后,在datagrid控件中显示所有已经收到的短信,可以在单选按钮的单击事件中编写如下代码:inti,iTemp;CString
17、csSQL,csFldName,/ 字段名称csTemp;_RecordsetPtrpRecSet;/ 指向记录集的指针/ 以下代码在datagrid控件中显示所有短信信息csSQL.Format(%s%s%s,select * from 所有短信 where 接收号码=,m_csSIMPhoNum,);pRecSet = m_pConn-Execute(_bstr_t)csSQL,NULL,adCmdText);/ 增加一条记录m_dgd_SMMemo.SetRefDataSource(NULL);m_dgd_SMMemo.SetRefDataSource(LPUNKNOWN)pRecSet
18、);/ datagrid控件与记录集m_pRecSet绑定m_dgd_SMMemo.SetWindowText(已收到短信);/ 修改dataGrid控件的标题/lColCnt = m_org1Cols.GetCount();/ 取得列集中列的个数for(i=0; iFields-GetItem(long)i)-GetName();/再取得列集中的列,由_variant_t变量指出列名m_col = m_SMMemCols.GetItem(_variant_t(csFldName);if(i=5)/ 最后一列宽度m_col.SetWidth(820);/ 指定列宽m_dgd_SMMemo.Re
19、fresh();/ 刷新datagrid控件2.3使用数据库控件下面再说说用ado控件操作access数据库的步骤:l 在vc+6的集成开发环境下,新建一个基于对话框的MFC AppWizard(exe)工程,工程名称为AdoAccess。l 打开菜单项:Project/Add to Project/Components and Controls,打开“Components and Controls Gallery”对话框,如图2-2所示。图2-2l 双击“Registered ActiveX Controls”目录,可以看到已经注册的ActiveX控件,如图2-3所示。图2-3l 双击“Mi
20、crosoft ADO Data Control,version 6.0(OLEDB)”,将会弹出图2-4所示对话框,询问用户是否插入该控件。图2-4l 单击“确定”按钮,打开“Confirm Classes” 窗口,如图2-5所示。图2-5为了使用户能够在工程中使用ADO Data控件,系统将在工程中自动添加7个类,如图中所示。l 单击“OK”按钮,返回如图2-2所示的对话框,单击“Close”按钮,关闭窗口。可以看到,在控件工具栏中新增了一个控件,这就是ADO Data控件,如图2-6所示。图2-6l 再添加一个DataGrid控件,用于显示数据库的记录集(表)。添加步骤跟上面添加Ado
21、Data控件的过程一样,只是在图2-2中选择“Microsoft DataGrid Control,Version 6.0(OLEDB)”。而且这个控件会在工程中自动添加10个类,包括CDataGrid、CColumns、CSplit、CDataFormatDisp、CStdDataFormatsDisp、CColumn和CSplits、COleFont、CSelBookmarks、CPicture。添加完DataGrid控件的控件工具栏如图2-7所示。图2-7l 至此,有关数据库的控件已经添加完了。在对话框控件上画一个AdoData控件和一个DataGrid控件,再画一个List Box控件
22、,“确定”和“取消”两个按钮不变。把AdoData控件的ID改为“IDC_ADODC_lonLat”,标题改为“经纬度”;DataGrid控件的ID改为“IDC_DATAGRID_lonLat”,标题改为“经纬度”。l 打开AdoData控件的属性对话框的“通用”页,选中“使用连接字符串(C)”单选按钮,如图2-8所示。图2-8单击“生成(U)”按钮,打开“数据连接属性”对话框,选择“提供者”页,单击“Microsoft Jet 4.0 OLE DB Provider”,选中它,如图2-9所示。图2-9单击“下一步(N)”按钮,打开“连接”页。单击“1.选择或输入数据库名称(D):”文本框后面
23、的“”按钮,打开“选择access数据库”对话框,选中要访问的access数据库,单击“打开(O)”按钮,在“1.选择或输入数据库名称(D):”下面的文本框内就会出现access数据库的路径,如图2-10所示。图2-10单击“测试连接(T)”按钮,系统提示“测试连接成功。”单击“确定”按钮,关闭“数据连接属性”对话框。 注意如果所要连接的access数据库设置了密码,那就先不要测试连接,直接点击“确定”按钮关闭“数据连接属性”对话框,然后再次打开ADOData控件属性对话框的“通用”页,“使用连接字符串(C)”下面的文本框中出现连接字符串,在它的后面添加以下字符串:;Jet OLEDB:Dat
24、abase Password=密码然后点击“生成”按钮,打开“数据连接属性”对话框,选择“连接”页,单击“测试连接(T)”按钮,系统会提示“测试连接成功。”。至此,我们已经把ADOData控件与一个access数据库连接起来了。l 事实上,一个ADOData控件只能对应一个记录集(表)。我们现在已经把一个ADOData控件与一个access数据库建立了连接,但这个ADO控件到底对应的是数据库的哪一个记录集(表)呢?因为一个数据库往往包含了很多个表。这就要求ADO控件为我们指定一个记录集(表)。具体过程如下:打开ADO控件的属性对话框,选择“记录源”页,在“命令类型”组合框中选择“2adCmdT
25、able”,再在下面的“表或存储过程名称”组合框中选中所要连接的记录集(表),关闭属性对话框。这样就把ADO控件与此access数据库中的一个记录集(表)连接起来了。如图2-11所示。图2-11至此,我们已经完成了ADOData控件与access数据库某一个记录集(表)的连接。l 再来看看如何把ADO控件所连接的access记录集(表)显示出来。这就要用到DataGrid控件咯。打开DataGrid控件的属性对话框,选中“All”页,在左侧的“property”栏中点击“DataSource”项,在它右侧的组合框中选择“IDC_ADODC_lonLat”(即ADO控件的ID),关闭属性对话框。
26、这样,就把DataGrid控件与ADO控件关联起来了。如图2-12所示。图2-12l 运行程序,可以看到DataGrid中出现ADO所关联的access记录集(表)的内容,如图2-13所示。图2-13三、用ado操作SQLServer3.1完全由代码实现第2.1节所述为操作数据库的通用步骤,对于任何一种数据库都是适用的。不同类型的数据库就是通过连接字符串来区分的。对于SQLServer数据库,连接字符串是:Provider= SQLOLEDB;Server=ntserver;Server=服务器(工作站)名称;DATABASE=数据库名称连接数据库的Open函数的参数也有所变动:hRes =
27、pCnn-Open( (_bstr_t)sUsrConStr, / 连接字符串(_bstr_t)sUsrName, / 数据库用户名(_bstr_t)sUsrPwd, / 数据库密码adModeUnknown);3.2使用数据库控件使用ADO控件访问SQLServer数据库,与访问access数据库基本相同,只是在图2-8的步骤上应选择“Microsoft OLE DB Provider for SQL Server”,然后单击“下一步(N)”,于是图2-9的画面就变成:图3-1在“1.选择或输入服务器名称(E)”组合框中选择数据库所在服务器的名称;在“2.输入登录服务器信息”下面的单选按钮选中“使用指定的用户名称和密码(U):”,然后在下面的“用户名称(N):”及“密码(P):”文本框中分别输入用户名和密码(即访问SQLServer数据库的用户名和密码);在第“3.”中选中“在服务器上选择数据库(D):”,然后从下面的组合框中选择目标数据库。单击“测试连接(T)”按钮,系统提示连接成功,单击“确定”按钮,关闭“数据连接属性对话框”。再次打开ADO控件的属性对话框,选择“身份验证”选项卡,用户名称和密码已经显示在上面了。
限制150内