MFC使用ADO连接SQL数据库的学习手记

来源:互联网 发布:观测数据 英文 编辑:程序博客网 时间:2024/05/22 04:33

主要出自:http://www.cctry.com/forum.php?mod=viewthread&tid=25628

外加自己看代码的整理。 doing

连接步骤:
首先,在工程中的预编译头文件stdafx.h的末尾导入ADO库代码为:#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","rsEOF")   

rename ("EOF", "rsEOF")说明将ADO中结束标志EOF改为rsEOF,以避免和其它库中命名相冲突
然后可以在你想要访问数据库的地方先创建三个对象如下:
    _CommandPtr     m_ptrCommand;       //命令对象  
    _RecordsetPtr   m_ptrRecordset;     //记录集对象  
    _ConnectionPtr  m_ptrConnection;    //数据库对象  

    //创建对象  
    m_ptrCommand.CreateInstance(__uuidof(Command));  
    m_ptrRecordset.CreateInstance(__uuidof(Recordset));  
    m_ptrConnection.CreateInstance(__uuidof(Connection));  


当然,也可以在定义时就以构造函数的形式创建好:
    _CommandPtr     m_ptrCommand(__uuidof(Command));       //命令对象  
    _RecordsetPtr   m_ptrRecordset(__uuidof(Recordset));     //记录集对象  
    _ConnectionPtr  m_ptrConnection(__uuidof(Connection));    //数据库对象  

在连接SQL Server数据库的时候就需要用到 _ConnectionPtr对象了,代码为:

m_ptrConnection->ConnectionString=L"Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=(数据库名字)HYL;Data Source=(这里填写数据拥有者,例如我的是)HYL-PC";

m_ptrConnection->Open("","","",adConnectUnspecified);
这是Windows的认证方式.连接成功以后就可以使用这个连接来执行SQL语句了,如果想要接收结果,就得用 _RecordsetPtr:

访问ACCESS 数据库 的连接代码为:
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=databaseName(包括路径);User ID=userName;Password=userPassword;" 


m_ptrRecordset=m_ptrConnection->Execute(SQL语句字符串,NULL,adCmdText);

另外,还可以用 m_ptrRecordset->Open("SQL语句",m_ptrConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText)
来返回要查询的记录集。

然后,为了用到记录集里面的不同字段就要  m_ptrRecordset->GetCollect("字段名"),这里返回的是 _variant_t类型的数据,可以用_bstr_t强制类型转换为  const char *然后再使用.  m_ptrRecordset->MoveNext(),可以移动到下一条记录,m_ptrRecordset->rsEOF可以判断是否为记录集末尾和m_ptrRecordset->BOF判断是否为空记录集,若为空则返回真,否则为假。

也可以用m_pRecordset->Fields->GetItem(字段名)->Value方法,来获取 当前记录指针所指的字段值,然后再用MoveNext()方法移动到下一条记录位置。


——插入记录。可以先用AddNew()方法新增一个空记录,再用PutCollect(字段名,值)输入每个字段的值,最后再Update()更新到库 中数据既可
m_pRecordset->AddNew();  
    m_pRecordset->PutCollect("Name", _variant_t(m_Name));  
    m_pRecordset->PutCollect("Age", atol(m_Age));  
    m_pRecordset->Update();  


——移动记录指针。移动记录指针可以通过MoveFirst()方法移动到第一条记录、MoveLast()方法移动到最后一条记录、 MovePrevious()方法移动到当前记录的前一条记录、MoveNext()方法移动到当前记录的下一条记录。但我们有时经常需要随意移动记录指 针到任意记录位置时,可以使用Move(记录号)方法来实现,注意: Move()方法是相对于当前记录来移动指针位置的,正值向后移动、负值向前移动,如:Move(3),当前记录是3时,它将从记录3开始往后再移动3条 记录位置。

——修改记录中字段值。可以将记录指针移动到要修改记录的位置处,直接用PutCollect(字段名,值)将新值写入并Update()更新数据库既 可。可以用上面方法移动记录指针,修改字段值代码如下所示:


——删除记录。删除记录和上面修改记录的操作类似,先将记录指针移动到要修改记录的位置,直接用Delete()方法删除它并用Update()来更新数 据库既可。代码如下所示:


最后当不用时要关闭对象和释放资源:
  
m_ptrCommand->Close();
m_ptrCommand.Release();

m_ptrRecordset->Close();
m_ptrRecordset.Release();

m_ptrConnection->Close();
m_ptrConnection.Release();
这里必须注意:其实这三个对象都是智能指针类型,在访问其他方法和属性时都是用箭头指向操作符->,但是在调用Release方法时释放引用计数时必须使用点操作符.否则会出错。