MFC实现SQL数据库ADO连接
- 格式:docx
- 大小:164.23 KB
- 文档页数:10
MFC(Microsoft Foundation Classes)是微软提供的一个类库,用于在C++环境下编写应用程序。
而SQL Server是由Microsoft 开发和推广的关系数据库管理系统(RDBMS)。
MFC本身并不直接与SQL Server数据库交互,而是通过ADO (ActiveX Data Objects)或MFC的数据库类(如CDatabase,CRecordset等)来实现与数据库的交互。
如果你想在MFC应用程序中使用SQL Server,你需要做的是:
1. 配置SQL Server数据库:安装SQL Server,创建数据库,配置服务器等。
2. 连接到数据库:使用ADO或MFC的数据库类来连接到你的SQL Server数据库。
3. 执行SQL语句:使用ADO或MFC的数据库类来执行SQL语句,如查询、插入、更新和删除等。
4. 处理结果:获取查询结果,处理异常等。
在MFC应用程序中,你可以使用ADO对象来与SQL Server数据库进行交互。
例如,你可以使用ADO的Connection对象来连接到数据库,使用Command对象来执行SQL语句,使用Recordset对象来获取查询结果等。
另外,你还可以使用MFC的数据库类来与SQL Server数据库进行交互。
例如,你可以使用CDatabase类来打开数据库连接,使用CRecordset类来执行查询并获取结果等。
总的来说,要在MFC应用程序中使用SQL Server数据库,你需要掌握一些关于ADO或MFC的数据库类的知识,并了解如何连接到数据库、执行SQL语句和处理结果等操作。
(1)Windows环境下,ODBC数据源的配置方法:1)开始→设置→控制面板→管理工具→双击“数据源(ODBC)”。
2)在ODBC数据源管理器中,单击“系统DSN”标签;单击“添加(D)”按钮,并在“列表框”中选择“SQL Server”,然后单击“完成”。
如果已经存在现有的数据源,则选择指定的数据源后,单击“配置”,转向对该数据源进行重新配置。
3)在创建到SQL Server新数据源窗口(如图10-4)中的“名称(M):”右侧,输入:VCSQLServer2005;“描述(D):”右侧,输入:VC SQL Server 2005;“服务器(S):”右侧,输入:指定服务器的位置和名称(通常使用默认服务器,输入一个英文字符半角圆点.)。
图10-4 ODBC数据源设置4)在创建到SQL Server新数据源窗口中,单击“下一步(N)>”,选择“使用网络登录ID的Windows NT验证(W)”或者“使用用户输入登录ID和密码的SQL Server(S)”(默认选择前者),然后单击“下一步(N)>”。
5)在创建到SQL Server新数据源窗口中,勾选“更改默认的数据库为(D):”,并在其下方的下拉列表框中,选择用户连接的默认数据库(本例选择:VcSqlAdoDB),然后单击“下一步(N)>”,再单击“完成”。
6)在ODBC Microsoft SQL Server安装窗口中,单击“测试数据源(T)…”,等待测试成功后,单击“确定”完成数据源配置。
(2)Windows环境下,Visual C++ 6.0连接SQLServer 2005数据库的ADO方法:1)引入ADO库定义文件,初始化COM库使用# import把动态连接库msado15.dll导入Visual C++应用程序,并生成定义ADO库的两个C++头文件:msado15.tlh和ado15.tli。
即:# import "c:Program FilesCommon FilesSystemADOmsado15.dll"no_namespace rename("EOF","EndOfFile")使用CoInitialize ()初始化COM库。
VC++中使用MFC通过ADO连接数据库VC++中使用MFC通过ADO连接数据库一.让我们看看ADO数据库访问技术使用的基本步骤及方法:1.首先,要用#import语句来引用支持ADO的组件类型库(*.tlb),其中类型库可以作为可执行程序(DLL、EXE等)的一部分被定位在其自身程序中的附属资源里,如:被定位在msado15.dll的附属资源中,只需要直接用 #import引用它既可。
可以直接在Stdafx.h文件中加入下面语句来实现:#import "c:/program files/common files/system/ado/msado15.dll"no_namespace rename("EOF", "adoEOF") 【注意,在MFC中路径要用"/"或者"//"】其中路径名可以根据自己系统安装的ADO支持文件的路径来自行设定。
当编译器遇到#import语句时,它会为引用组件类型库中的接口生成包装类,#import语句实际上相当于执行了API涵数LoadTypeLib()。
#import语句会在工程可执行程序输出目录中产生两个文件,分别为*.tlh(类型库头文件)及*.tli(类型库实现文件),它们分别为每一个接口产生智能指针,并为各种接口方法、枚举类型,CLSID等进行声明,创建一系列包装方法。
语句no_namespace说明ADO对象不使用命名空间,rename ("EOF", "adoEOF")说明将ADO中结束标志EOF改为adoEOF,以避免和其它库中命名相冲突。
2.其次,在程序初始过程中需要初始化组件,一般可以用CoInitialize(NULL);来实现,这种方法在结束时要关闭初始化的COM,可以用下面语句CoUnInitialize();来实现。
Visual C++ 中使用ADO、RDO数据绑定Visual C++ 中使用ADO、RDO数据绑定 (1)在Visual C++ 中使用ADO 数据绑定需要下列步骤: (1)在Visual C++ 中使用ADO 数据绑定 (1)创建使用ADO 数据控件修改数据的应用程序 (2)在Visual C++ 中使用RDO 数据绑定需要下列步骤: (3)在Visual C++ 中使用RDO 数据绑定 (3)创建使用RDO RemoteData 控件修改数据的应用程序 (4)Visual C++ 中使用ADO、RDO数据绑定在Visual C++ 中使用ADO 数据绑定需要下列步骤:添加ADO 数据控件。
指向数据源。
指定记录源(SQL 查询或数据检索语言)。
添加ADO 数据绑定控件。
将数据绑定控件连接到ADO 数据控件。
选择要绑定到ADO 数据控件记录源的字段。
在 Visual C++ 中使用 ADO 数据绑定使用“MFC 应用程序向导”创建MFC 对话框应用程序或MFC Formview 应用程序。
将Microsoft ADO 数据控件添加到对话框;请参见将控件插入Visual C++ 应用程序。
将ADO 数据控件指向OLE DB 数据源。
右击ADO 数据控件,再单击“属性”。
在“控件”选项卡上,单击“使用连接字符串”。
可以使用提供的提供程序也可以删除它。
单击“生成”。
如果从“使用连接字符串”中删除了提供程序,现在可以定义一个。
定义提供程序后,再次访问ADO 数据控件的属性,然后再次选择“生成”继续。
如果在选择“生成”之前在“使用连接字符串”中定义了提供程序,现在可以定义数据链接属性。
这将显示“DataLink 向导”。
如有必要更改“提供程序”,并为提供程序定义适当的“位置”和“数据源”值。
例如,如果使用的是SQL Server 提供程序,则“位置”指定数据库服务器,而“数据源”指定数据库。
如果使用的是ODBC 提供程序,则“数据源”对应于ODBC DSN。
用C#动态创建Access数据库记得以前要动态的创建Access数据库的mdb文件都是采用DAO,用VC开发,一大堆的API,很是麻烦。
现在好像也鲜有人提起DAO。
其实动态的创建mdb数据的最简单的方法还是ADOX。
用ADOX创建access数据库方法很简单,只需要new一个Catalog对象,然后调用它的Create 方法就可以了,如下:ADOX.Catalog catalog = new Catalog();catalog.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\test.mdb;JetOLEDB:Engine Type=5");仅仅两行代码就搞定了。
下来我主要介绍一下在c#中的实现细节。
首先你要添加引用,在“Add reference”对话框里切换到Com页面,选择“Microsoft ADO Ext. 2.8 for DDL and Security”,然后点击OK。
在文件的开头using ADOX名字空间。
然后添加如上面所示的代码就可以成功的创建Access 数据库了,代码如下:using System;usingSystem.Collections.Generic;usingSystem.Text;using ADOX;namespace testADOX{class Program{static void Main(string[] args){ADOX.Catalog catalog = new Catalog();catalog.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\test.mdb;JetOLEDB:Engine Type=5");}}}创建了数据库文件是没有实际用处的,我们还要创建表。
在创建表之前,我们必须连接目标数据库,用来连接数据的桥梁居然是ADO的Connection对象,所以我们不得不再次添加对ADO的应用,在添加引用对话框中切换到Com页面,选择“Microsoft ActiveX Data Objects 2.8 Library”,然后点击OK。
这一步比较简单,直接打开SQL Server Management Studio,根据自己需要设计数据库中的表,及其之间的依赖关系等等!要想设计一个完美的数据库,就必须了解数据库的基本知识。
这里不再具体说了。
这里我们假设我们的数据库名字为Test012、配置数据源数据库设计建立完成后,它只是单独的几张表,我们并不能在程序中去访问它,因为程序并不知道数据库在哪里。
因此,就要在应用程序跟数据库之间建立连接。
配置数据源说通俗了就是为数据库创建一个对外的窗口,应用程序通过这个窗口来访问数据库中的数据。
具体配置步骤为:1)打开控制面板--〉管理工具--〉数据源,在用户DSN面板选择“添加”2)在数据源驱动程序中选择“SQL Server” --〉完成,即打开“创建到SQL Server 的新数据源”3)在“数据源名称”中填入名称,我们填TestSQL01,然后选择服务器,在其中选择要连接到的SQL Server服务器。
(如果你电脑的SQL Server服务打开的话,就会有自己的主机名。
或者选择网络上的某个SQL Server。
4)点击下一步配置认证信息5)配置完后点击下一步,选中“更改默认的数据库为”复选框,在下拉中选择自己刚才建立的要连接的数据库。
(这一步很重要,一般一个Server上会有多个数据库,如果不更改数据源的默认数据库,你建立的数据源将连接到默认的数据库,这样就会造成程序中执行SQL语句时“对象名无效”的错误,即找不到你指定的数据表等)6)选择完数据库后直接下一步--〉完成就完成了数据源的配置。
接下来会出现配置数据源的基本信息,可以通过“测试数据源”来测试数据源是否配置成功。
3、数据库的连接建立完数据库,又配置好了数据源,接下来就可以在程序中通过数据源来访问数据库了。
1)首先要在程序中引入MFC ODBC数据库的定义文件#include <afxdb.h>2)定义CDataBase数据库对象,CDatabase m_db;3)利用CDataBase类的OpenEx函数建立和数据库的连接;m_db.OpenEx(_T("DSN=TestSQL01;"),CDatabase::noOdbcDialog);/*这里的TestSQL01 即为步骤2中建立的数据源,然后根据OpenEx函数格式填入参数,主要是用户名、密码之类,这里没有设置,所以就没有*/在完成了上面的步骤后,就可以使用SQL语句对数据库进行操作了。
使用VBA连接SQL数据库获取数据VBA是Visual Basic for Applications的缩写,它是Microsoft Office套件内的一种编程语言。
通过VBA,我们可以在Microsoft Excel、Access等软件中编写代码来进行数据操作和处理。
在VBA中,我们可以使用ADO(ActiveX Data Objects)来连接SQL数据库并获取数据。
ADO是Microsoft的一组COM组件,提供了访问多种数据库的接口和功能。
下面是使用VBA连接SQL数据库获取数据的步骤:1.引入ADO库:2.创建连接对象:在代码中,首先要创建一个ADODB.Connection对象,用于表示与SQL数据库的连接。
可以使用如下代码创建连接对象:```vbaDim conn As New ADODB.Connection```3.打开连接:使用连接对象的Open方法打开与数据库的连接。
需要提供连接字符串,指定数据库的位置、用户名、密码等信息。
具体连接字符串的格式取决于使用的数据库类型和驱动程序。
以下是一个连接MySQL数据库的示例代码:```vbaDim conn As New ADODB.ConnectionDim connStr As Stringconn.Open connStr```4.创建命令对象:```vbacmd.ActiveConnection = conn```5.执行SQL查询:指定要执行的SQL查询,并使用命令对象的Execute方法执行该查询。
以下是一个查询表数据的示例代码:```vbaDim sql As Stringsql = "SELECT * FROM Customers"Dim rs As ADODB.RecordsetSet rs = cmd.Execute(sql)```6.处理返回结果:执行完查询之后,可以通过Recordset对象获取返回的结果。
MFC中使用ADO连接SQL Server 2008 R2一、在工程中添加一个MFC类ADO_Database,当然,你可以定义一个别的类名,只要这个类名是合法的二、在解决方案中找到ADO_Database.h文件,并在这个文件中进行一下步骤:1、在头文件的最开始添加以下代码#import "C:\Program Files\Common Files\System\ado\msado15.dll" \no_namespace rename("EOF","adoEOF")rename("BOF","adoBOF")2、在public中//添加一个指向Connection对象的指针_ConnectionPtr m_pConnection;//添加一个指向Recordset对象的指针_RecordsetPtr m_pRecordset;3、在public中//添加三个函数void OnInitADOConn(void);//连接到数据库void ExitConnect(void);//与数据库断开连接_RecordsetPtr GetRecordSet(_bstr_t bstrSQL);//获取数据集三、在解决方案中找到ADO_Database.cpp文件,并在文件中进行以下步骤:1、实现连接数据库方法void ADO_Database::OnInitADOConn(void){//初始化OLE/COM库环境::CoInitialize(NULL);try{//创建connection对象m_pConnection.CreateInstance("ADODB.Connection");//设置SQL Server的连接字符串,其中Initial Catalog为数据库名称,Data Source为//服务器名称,Open函数的第2、3个参数分别为数据库的用户名和密码_bstr_t strConnect = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;InitialCatalog=NetWork_gobang;Data Source=TabbyCat-PC";m_pConnection->Open(strConnect, "Project", "Project", adModeUnknown);}//捕捉异常catch (_com_error e){//显示错误信息AfxMessageBox(e.Description());}}2、实现与数据库断开连接方法void ADO_Database::ExitConnect(void){//关闭记录集和连接if (m_pRecordset != NULL)m_pRecordset->Close();m_pConnection->Close();//释放环境::CoUninitialize();}3、实现获取数据集方法_RecordsetPtr ADO_Database::GetRecordSet(_bstr_t bstrSQL){try{//连接数据库,如果connection对象为空,则重新连接数据库if (m_pConnection == NULL)OnInitADOConn();//创建记录集对象m_pRecordset.CreateInstance(__uuidof(Recordset));//取得表中的记录m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic, adLockOptimistic, adCmdText);}catch (_com_error e){e.Description();}//返回记录集return m_pRecordset;}四、调用方法进行数据库操作1、在头文件中引用并声明#include "ADO_Database.h"ADO_Database m_adodatabase;//定义数据库对象2、使用方法实现数据库的连接、操作和关闭m_adodatabase.OnInitADOConn();//连接到数据库CString sql;sql.Format(L"select* from Information");// Information为数据表的名称_RecordsetPtr m_pRecordset;//打开记录集m_pRecordset = m_adodatabase.GetRecordSet((_bstr_t)sql);try{m_pRecordset->AddNew();m_pRecordset->PutCollect("time", (_bstr_t)svtm);//向数据库中添加CString类型的数//据m_pRecordset->PutCollect("id", tcpPackage.id);//向数据库中添加int类型的数据m_pRecordset->Update();m_adodatabase.ExitConnect();//断开与数据库的连接}catch (...){AfxMessageBox(L"写入数据失败!");return;}。
C#中使用连接SQL Server数据库,自动增长字段用作主键,处理事务时的基本方法问题描述:假设在数据库中存在以下两张数据表:User表,存放用户的基本信息,基本结构如下所示:UserDepart表,存放用户所拥有的部门(我们假设一个用户拥有多个部门,虽然听起来有点别扭,此处仅作示例,可以理解为一个用户拥有多个职位等等),该表的基本结构如下所示:向数据库中插入一条用户信息的时候,为了保证数据的一致性,必须使用事务的方式“同时”操作User表和UserDepart表。
先将用户姓名写入User表中,再将其所拥有的部门写入UserDepart表中,使用事务机制保证这两步操作要么同时成功,要么同时失败。
问题就出在:第一步操作完成后,我们并不知道该向第二步操作写入的ID_User的值是多少,因为这个值是SQL Server自动生成的。
解决思路:可以借助SELECT IDENT_CURRENT('User') AS ‘NewInsertID’ 来查询最近一次插入User 表的数据的自动编号的值。
程序实现:1 public struct Chaos_TranSQLCmd2 {3 /// <summary>4 /// 一条SQL语句5 /// </summary>6 public string strSQL;78 /// <summary>9 /// 标记该条SQL语句是否需要连接ID_User10 /// </summary>11 public bool bNeedID;12 }131415 public void Chaos_ExecuteSqlTran(List<Chaos_TranSQLCmd> listTranSQLCmd,string strInsertID_SQL)16 {17 using (SqlConnection ChaosSqlConn = new SqlConnection(strSqlConnString))18 {19 SqlCommand ChaosSqlCmd = new SqlCommand();20 ChaosSqlCmd.Connection = ChaosSqlConn;21 ChaosSqlConn.Open();22 SqlTransaction ChaosSqlTran = ChaosSqlConn.BeginTransaction();23 ChaosSqlCmd.Transaction = ChaosSqlTran;2425 try26 {27 string mID_User = "";2829 //先将数据插入User30 mandText = strInsertID_SQL;31 ChaosSqlCmd.ExecuteNonQuery();3233 //再获取ID_User34 DataSet ds = this.ExecAdapter("select IDENT_CURRENT('PT_User') as 'ID'", "T");35 DataTable dt = ds.Tables["T"];36 if (dt.Rows.Count>0)37 {38 mID_User = dt.Rows[0]["ID"].ToString();39 }4041 for (int i = 0; i < listTranSQLCmd.Count; i++)42 {43 //如果队列中的语句需要连接ID,则处理SQL语句后再执行44 string strSQL = "";45 if (listTranSQLCmd[i].bNeedID==true)46 {47 strSQL = string.Format(listTranSQLCmd[i].strSQL, mID_User);48 }49 else50 {51 strSQL = listTranSQLCmd[i].strSQL;52 }5354 mandText = strSQL;55 ChaosSqlCmd.ExecuteNonQuery();56 }5758 //全部成功执行则提交59 mit();60 }61 catch (System.Data.SqlClient.SqlException Ex)62 {63 //发生问题则回滚64 ChaosSqlTran.Rollback();65 throw new Exception(Ex.Message);66 }67 }68 }测试代码如下:1 static void Main(string[] args)2 {3 try4 {5 List<DB_Operation.ChaosDbOprt.Chaos_TranSQLCmd> Chaos_SQLCmdList = new List<DB_Operation.ChaosDbOprt.Chaos_TranSQLCmd>();67 //构造SQL语句向User表中写入数据8 string strSQL = "insert into PT_User (UserName) values ('Lee')";910 //构造SQL语句向UserDepart表写入数据11 for (int i = 0; i < 10; i++)12 {13 DB_Operation.ChaosDbOprt.Chaos_TranSQLCmd nCmd = new DB_Operation.ChaosDbOprt.Chaos_TranSQLCmd();14 if (i==6)15 {16 //构造错误SQL语句,使写入数据库的操作不能成功执行17 nCmd.strSQL = "insert into PT_UserDepart (ID_User,ID_Depart) values ({0}," + "A String which can't be inserted as ID_Depart)";18 }19 else20 {21 //正常SQL语句22 nCmd.strSQL = "insert into PT_UserDepart (ID_User,ID_Depart) values ({0}," + i.ToString() + ")";23 }24 nCmd.bNeedID = true;25 Chaos_SQLCmdList.Add(nCmd);26 }2728 DB_Operation.ChaosDbOprt CDO = new DB_Operation.ChaosDbOprt();29 CDO.Chaos_ExecuteSqlTran(Chaos_SQLCmdList, strSQL);3031 Console.WriteLine("数据写入成功!");32 Console.ReadLine();33 }34 catch (Exception ex)35 {36 Console.WriteLine("Error:\r\n"+ex.Message);37 Console.ReadLine();38 }39 }规范化代码如下:1 #region 实现数据库事务的方法,实现以事务的方式将多条SQL语句同时写入数据库(其中某些语句依赖于第一条语句插入数据库后自动生成的ID)23 public struct Chaos_TranSQLCmd4 {5 /// <summary>6 /// 一条SQL语句,在需要添加ID的地方用"{0}"来代替7 /// 如:INSERT INTO PT_FeeItemDetails(ID_FeeItem,ID_ExamItem) VALUES ({0},005)等8 /// </summary>9 public string strSQL;1011 /// <summary>12 /// 标记该条SQL语句是否需要连接ID13 /// </summary>14 public bool bNeedID;15 }16 /// <summary>17 /// 该函数用于实现以事务的方式将多条SQL语句同时写入数据库(其中某些语句依赖于第一条语句插入数据库后自动生成的ID)18 /// </summary>19 /// <param name="strInsertID_SQL">需要先插入数据库中以产生ID的SQL语句</param>20 /// <param name="strTableName">需要首先插入数据库中以产生ID的数据表的名称,如"PT_FeeItem"等</param>21 /// <param name="listTranSQLCmd">需要连接ID的SQL语句的列表</param>22 public void Chaos_ExecuteSqlTran_InsertID(string strInsertID_SQL,string strTableName, List<Chaos_TranSQLCmd> listTranSQLCmd)23 {24 using (SqlConnection ChaosSqlConn = new SqlConnection(strSqlConnString))25 {26 SqlCommand ChaosSqlCmd = new SqlCommand();27 ChaosSqlCmd.Connection = ChaosSqlConn;28 ChaosSqlConn.Open();29 SqlTransaction ChaosSqlTran = ChaosSqlConn.BeginTransaction();30 ChaosSqlCmd.Transaction = ChaosSqlTran;3132 try33 {34 string m_strID = "";3536 //先将数据插入User37 mandText = strInsertID_SQL;38 ChaosSqlCmd.ExecuteNonQuery();3940 string strSQL_Tmp = string.Format("SELECT IDENT_CURRENT('{0}') as 'ID'",strTableName);41 //再获取ID42 DataSet ds = this.ExecAdapter(strSQL_Tmp, "T");43 DataTable dt = ds.Tables["T"];44 if (dt.Rows.Count>0)45 {46 m_strID = dt.Rows[0]["ID"].ToString();4748 for (int i = 0; i < listTranSQLCmd.Count; i++)49 {50 //如果队列中的语句需要连接ID,则处理SQL语句后再执行51 string strSQL = "";52 if (listTranSQLCmd[i].bNeedID == true)53 {54 strSQL = string.Format(listTranSQLCmd[i].strSQL, m_strID);55 }56 else57 {58 strSQL = listTranSQLCmd[i].strSQL;59 }6061 mandText = strSQL;62 ChaosSqlCmd.ExecuteNonQuery();63 }64 }65 else66 {67 //如果没有正确获取首先插入语句的ID,则回滚68 ChaosSqlTran.Rollback();69 throw new Exception("产生ID语句没有成功执行,后续语句无法继续执行,已回滚!\r\n");70 }717273 //全部成功执行则提交74 mit();75 }76 catch (System.Data.SqlClient.SqlException Ex)77 {78 //发生问题则回滚79 ChaosSqlTran.Rollback();80 throw new Exception(Ex.Message);81 }82 }83 }84 #endregion(注:可编辑下载,若有不当之处,请指正,谢谢!)。
VC MFC实现SQL数据库ADO连接(完整版)关于vc6.0中实现ADO SQL数据库连接的文章网上虽然很多,但大多写的很繁琐,对于我们这样的菜鸟来说,还是很希望有一篇简单化的文章的。
希望跟我一样的菜鸟们学得开心!
源代码文件链接:
概述:
要在一个vc工程中实现数据库的连接,最好的方式是在新建一个用于连接数据库的类比如ADOConn,需要连接数据库的时候将这个类实例化就可以了。
操作:新建一个ADOConn的对象,比如ADOConn ac;。
然后再引用些对象就可以实现相应的操作了。
实践过程:
(一)目的:封装一个自己的类。
在vc6.0中新建一个基于对话框的mfc工程,然后点击菜单栏->插入->类(mfc类)。
然后在“类的类型”中选择Generic Class,名称为ADOConn。
此后会在vc左边视窗的“Source Files”中多出一个ADOConn.cpp的文件,在"Header
Files"中多出一个“ADOCon.h”的文件。
如果是用VS2013来创建工程的情况:
VS2013中添加类:
右击myMFC(新建的项目)——添加——类——MFC类。
(二)打开ADOConn.h(即编辑ADOConn类的头文件)
(1)在第一行加入(用于vc支持ado连接)
这句话意味使用msado15.dll动态连接库文件,里面就有ADO.
如果存在问题:用VS2010的C++导入ADO导入不了,提示无法打开源文件msado15.tlh”的问题。
解决办法很简单:
在生成菜单--- 重新生成 --- 即可。
原因是:
当编译器遇到#import语句时,它会为引用组件类型库中的接口生成包装类,#import语句实际上相当于执行了API涵LoadTypeLib()。
#import语句会在工程可执行程序输出目录中产生两个文件,分别为*.tlh(类型库头文件)及*.tli(类型库实现文件),它们分别为每一个接口产生智能指针,并为各种接口方法、枚举类型,CLSID 等进行声明,创建一系列包装方法。
在没有经过编译器编译之前,文件还没有生成,所以,会出现错误提示。
(2)在class ADOConn类体中添加如下代码
至此ADOConn.h的操作完成。
(三)打开ADOConn.cpp(逐个实现其头文件ADOConn.h中定义但末实现的方法),将如下代码拷入文件末尾。
这段代码涉及到获取数据库连接中会出现的异常,并进行处理,不用过于深究其作用,等数据库连接成功后再慢慢研究。
此段代码中有些地方要根据自己数据库的配置情况,进行适当的改动。
需要改动的代码为:
如:
Provider不用改,Server是服务器的名称,怎么查看呢?
打开sql managementstudio连接进行后在左边的“对象资源管理器”中会看到服务器的名称。
我的叫DESKTOP-80T6JHL; Database是要连接到的数据库名称。
比如我在management studio中新建了一个数据库table1; uid=登陆服务器的用户名;pwd=这个用户名的密码,我的密码是123456;到这里就完成了此段代码的修改了。
(四) 保存以上文件。
即完成了sql ado连接类ADOConn的编辑。
比如我要在telbookDlg.cpp中需要连接到数据库,只需要引用如下代码:
到此,实现ado sql数据库的功能。
知识点补充:
要插入数据可以调用下面的语句:
其他说明:判断数据库连接是否成功的函数:
详解MFC使用ADO连接SQLServer数据库
VC用ADO访问数据库全攻略,介绍了VC用ADO来访问数据库的各个对象及各方法,很经典,也很实用,很值得一看。
一、ADO概述
ADO是Microsoft为最新和最强大的数据访问范例OLE DB 而设计的,是一个便于使用的应用程序层接口。
ADO 最主要的优点是易于使用、速度快、内存支出少和磁盘遗迹小。
二、在VC中使用ADO接口技术
1、引入ADO库文件
使用ADO前必须在工程的stdafx.h头文件里的顶头引入ADO库文件,以使编译器能正确编译。
用#import引入ADO库文件
这行语句声明在工程中使用ADO,但不使用ADO的名字空间,并且为了避免常数冲突,将常数EOF 改名为adoEOF。
现在不需添加另外的头文件,就可以使用ADO接口了。
2、初始化OLE/COM库环境
必须注意的是,ADO库是一组COM动态库,这意味应用程序在调用ADO前,必须初始化OLE/COM 库环境。
在MFC应用程序里,一个比较好的方法是在应用程序主类的:OnInitADOConn成员函数里初始化OLE/COM库环境。
(详细代码见上边的例子)
3、ADO接口简介
ADO库包含三个基本接口:_ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr接口。
_ConnectionPtr接口返回一个记录集或一个空指针。
通常使用它来创建一个数据连接或执行一条不返回任何结果的SQL语句,如一个存储过程。
使用_ConnectionPtr接口返回一个记录集不是一个好的使用方法。
对于要返回记录的操作通常用_RecordsetPtr 来实现。
而用_ConnectionPtr操作时要想得到记录条数得遍历所有记录,而用_RecordsetPtr时不需要。
_CommandPtr接口返回一个记录集。
它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。
在使用_CommandPtr接口时,你可以利用全局_ConnectionPtr接口,也可以在_CommandPtr 接口里直接使用连接串。
如果你只执行一次或几次数据访问操作,后者是比较好的选择。
但如果你要频繁访问数据库,并要返回很多记录集,那么,你应该使用全局_ConnectionPtr接口创建一个数据连接,
然后使用_CommandPtr接口执行存储过程和SQL语句。
_RecordsetPtr是一个记录集对象。
与以上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定,游标控制等。
同_CommandPtr接口一样,它不一定要使用一个已经创建的数据连接,可以用一个连接串代替连接指针赋给_RecordsetPtr的connection成员变量,让它自己创建数据连接。
如果你要使用多个记录集,最好的方法是同Command对象一样使用已经创建了数据连接的全局_ConnectionPtr 接口,然后使用_RecordsetPtr执行存储过程和SQL语句。
4、使用_ConnectionPtr接口
_ConnectionPtr主要是一个连接接口,取得与数据库的连接。
它的连接字符串可以是自己直接写,也可以指向一个ODBC DSN。
剩下部分资料,见:
好吧,直接来个例子吧:
//使用时注意代码中我的说明!!因为要修改一些内容!因为每个人登录数据库的登录信息,链接的数据库名均不一样,所以要修改!!。