连接步骤:
首先,在工程中的预编译头文件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方法时释放引用计数时必须使用点操作符.否则会出错。
首先,在工程中的预编译头文件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方法时释放引用计数时必须使用点操作符.否则会出错。