VC常用数据库操作方法 下载本文

代码5:使用_ConnectionPtr(基于DSN) _ConnectionPtr MyDb;

MyDb.CreateInstance(__uuidof(Connection));

MyDb->Open(\

代码6:使用_ConnectionPtr (基于非DSN) _ConnectionPtr MyDb;

MyDb.CreateInstance(__uuidof(Connection));

MyDb->Open(\PWD=admin\

5、使用_RecordsetPtr接口

_RecordsetPtr接口的使用方法和CDaoDatabase类似,通过以下代码的比较,你会发现使用_RecordsetPtr接口非常简单(以下代码使用上面已经创建的数据连接):

代码7:使用CDaoDatabase执行SQL语句

CDaoRecordset MySet = new CDaoRecordset(MyDb);

MySet->Open(AFX_DAO_USE_DEFAULT_TYPE,\Now using ADO:

代码8:使用_RecordsetPtr执行SQL语句 _RecordsetPtr MySet;

MySet.CreateInstance(__uuidof(Recordset)); MySet->Open(\

MyDb.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText); 现在我们已经有了一个数据连接和一个记录集,接下来就可以使用数据了。从以下代码可以看到,使用ADO的_RecordsetPtr接口,就不需要象DAO那样频繁地使用大而复杂的数据结构VARIANT,并强制转换各种数据类型了,这也是ADO的优点之一。假定程序有一个名称为m_List的的ListBox控件,下面代码我们用_RecordsetPtr接口获取记录集数据并填充这个ListBox控件:

代码9:使用DAO访问数据 VARIANT * vFieldValue; COleVariant covFieldValue; CString Holder;

while(!MySet->IsEOF()) {

MySet->GetFieldValue(\vFieldValue = (LPVARIANT)covFieldValue; if(vFieldValue->vt!-VT_NULL)

{

Holder.Format(\m_List.AddString(Holder); }

MySet.MoveNext(); }

代码10:使用ADO访问数据 _variant_t Holder try{

while(!MySet->adoEOF) {

Holder = MySet->GetCollect(\if(Holder.vt!=VT_NULL)

m_List.AddString((char*)_bstr_t(Holder)); MySet->MoveNext(); } }

catch(_com_error * e) {

CString Error = e->ErrorMessage(); AfxMessageBox(e->ErrorMessage()); }

catch(...) {

MessageBox(\发生错误!\}

必须始终在代码中用try和catch来捕获ADO错误,否则ADO错误会使你的应用程序崩溃。当ADO发生运行时错误时(如数据库不存在),OLE DB数据提供者将自动创建一个_com_error对象,并将有关错误信息填充到这个对象的成员变量.

6、使用_CommandPtr接口

_CommandPtr接口返回一个Recordset对象,并且提供了更多的记录集控制功能,以下代码示例了使用_CommandPtr接口的方法:

代码11:使用_CommandPtr接口获取数据 _CommandPtr pCommand; _RecordsetPtr MySet;

pCommand.CreateInstance(__uuidof(Command)); pCommand->ActiveConnection=MyDb;

pCommand->CommandText=\pCommand->CommandType=adCmdText;

pCommand->Parameters->Refresh();

MySet=pCommand->Execute(NULL,NULL,adCmdUnknown); _variant_t TheValue = MySet->GetCollect(\CString sValue=(char*)_bstr_t(TheValue);

7、关于数据类型转换

由于COM对象是跨平台的,它使用了一种通用的方法来处理各种类型的数据,因此CString 类和COM对象是不兼容的,我们需要一组API来转换COM对象和C++类型的数据。_vatiant_t和_bstr_t就是这样两种对象。它们提供了通用的方法转换COM对象和C++类型的数据。

8、OLE DB连接字符串(SQL Server) Standard Security:

oConn.Open \

\

\ \ \

信任连接:

oConn.Open \

\

\ \

连接到一个\

oConn.Open \

\ \ \ \

注: 连接到一个SQL Server 2000 \,必须安装MDAC 2.6 (或更高版本)。

总是提示用户输入用户名和密码: oConn.Provider = \

oConn.Properties(\oConn.Open \ \

连接本机SQL Server数据库:

oConn.Open \ \

\ \ \

通过IP地址连接:

oConn.Open \

\

\ \ \ \注:

- \通知OLE DB使用TCP/IP更优于使用命名管道;

- xxx.xxx.xxx.xxx是IP地址; - 1433是SQL Server默认的端口; - \是加密选项。

参考:

http://www.codetools.com/database/ http://www.vckbase.com

http://www.csdn.net/develop/Read_Article.asp?id=25607