以ado方式链接sqlserver数据库和access数据库 语言:c++
2017-06-19 10:18
218 查看
关于基本介绍转自:ADO接口之_ConnectionPtr点击打开链接
ADO中最重要的对象有三个:Connection、Recordset和Command,分别表示连接对象、记录集对象和命令对象。
三个对象对应的智能指针分别是:_ConnectionPtr、_RecordsetPtr、_CommandPtr。
ADO使用_ConnectionPtr这个指针来操纵Connection对象,类似地,后面用到的_CommandPtr和_RecordsetPtr分别表示命令对象指针和记录集对象指针。
Connection对象是这三个对象的基础,它的主要作用是建立与数据库的连接,建立了与数据库的连接后,才能进行其它有关数据库的访问和操作。也就是说,使用ADO操作数据库,通常先用Connection对象的Open方法打开一个库连接,然后才能进行数据库的操作。操作完成后,要关闭这个库连接。
本文只讲述Connection对象最常用的Open方法和Execute方法。
注意:在使用ADO进行操作之前,必须使用AfxOleInit()函数来进行初始化;
1. Open()方法
用于打开一个库连接,而Execute()方法一般用于执行一条SQL语句。
_ConnectionPtr智能指针的用法:
首先定义一个Connection类型的指针,然后调用CreateInstance()来创建一个连接对象的实例,再调用Open()函数建立与数据源的连接。
在建立连接对象后,可以使用连接对象的Execute()函数来执行SQL命令。
_ConnectionPtr智能指针Open()方法的原型:
Open(_bstr_t ConnectionString,_bstr_t UserID,_bstr_t Password,long Options)
ConnectionString为连接字串,UserID是用户名,Password是登陆密码
Options是连接选项,可以是如下几个常量:
1> adModeUnknown 缺省,当前的许可权未设置
2> adModeRead 只读
3> adModeWrite 只写
4> adModeReadWrite 可以读写
5> adModeShareDenyRead 阻止其它Connection对象以读权限打开连接
6> adModeShareDenyWrite 阻止其它Connection对象以写权限打开连接
7> adModeShareExclusive 阻止其它Connection对象打开连接
8> adModeShareDenyNone 阻止其它程序或对象以任何权限建立连接
2. Execute方法
函数原型:
_RecordsetPtr Connection::Execute(_bstr_t CommandText,VARIANT* RecordsAffected,long Options)
参数:
CommandText是命令字串,通常是SQL命令,
RecordsAffected是操作完成后所影响的行数
Options表示CommandText中内容的类型,可以取下列值之一:
1> adCmdText 表明CommandText是文本命令
2>adCmdTable 表明CommandText是一个表名
3>adCmdProc 表明CommandText是一个存储过程
4>adCmdUnknown 未知
Execute执行完后返回一个指向记录集的指针(_ResultsetPtr类型)
3. 异常捕获
出现的异常为:_com_error
例程CREATE_DB_AND_TABLE中已经使用了_ConnectionPtr指针的Open方法和Execute方法,在后面的例程我们将进一步详细说明。
//使用ado方式链接数据库需要导入msado15.dll 模块 #import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF", "adoEOF") rename("BOF", "adoBOF") //#import msado15.dll 后在编译阶段会生成 msado15.tlh源文件,msado15.tlh默认是有namespace ADODB{}所有内容都包在这个名字空间中用了no_namespace则生成的头文件中没有namespace,所有内容是全局的。 //rename的意思就是改名了,rename("EOF","adoEOF")改名为adoEOF,以免和C语言里的EOF重名。 int main() { CoInitialize(NULL);//初始化com _ConnectionPtr m_pConnect = NULL; HRESULT hr = m_pConnect.CreateInstance(__uuidof(Connection)); if (FAILED(hr)) return -1; try { // Open方法连接字串必须是BSTR或者_bstr_t类型 //Provider的属性对于access和sqlserver有所不同. access数据库用"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=./data/studetn.mdb;"这种格式链接数据库,下面的格式是sqlserver格式 m_pConnect->Open("Provider=SQLOLEDB;Data Source=192.168.1.2;User ID=admin;Password=admin1234;Initial Catalog=student", "", "", NULL); } catch (_com_error &e) { cout << e.Description() << endl; }//发生链接错误 _RecordsetPtr pRecordset; if (FAILED(pRecordset.CreateInstance(__uuidof(Recordset)))) { return -1; } try { pRecordset = m_pConnect->Execute(_bstr_t("select * from class1"), NULL, adCmdText);//将查询数据导入m_pRecordset数据容器 } catch (_com_error &e) { cout << e.Description() << endl; }// _variant_t cls; string last_pcls; if (!pRecordset->adoBOF)//有记录 { try { pRecordset->MoveFirst();//移动到第一条记录 while (!pRecordset->adoEOF)//还没到结尾 { //pcls = pRecordset->GetFields()->GetItem("name")->Value; cls = pRecordset->GetFields()->GetItem("sex")->Value; // 取下一条记录 pRecordset->MoveNext(); } } catch (_com_error &e) { cout << e.Description() << endl; } } if (pRecordset->GetState() == adStateOpen) { pRecordset->Close(); pRecordset = NULL; } if (m_pConnect) { m_pConnect->Close(); m_pConnect.Release(); } CoUninitialize(); }
相关文章推荐
- 较新一篇 / 较旧一篇 编辑 | 删除 | 复制链接 运用ADO方式在C++上连接SQL2008
- c++通过ADO方式操作SQLSERVER数据库
- VC++中使用ADO方式操作ACCESS数据库(转载)
- VC++中使用ADO方式操作ACCESS数据库
- 【C++程序设计语言A视频教程 全12讲 中科院】【下载链接】
- 如何使用 ADO.NET 和 Visual C++ .NET 以编程方式创建 SQL Server 数据库
- 当程序用ado的jet4.0方式连接的时候,对于设有access数据库密码的mdb的访问居然报错“无法启动应用程序,工作组信息文件丢失,或是已被其他用户已独占方式打开”,而用odbc方式不报错,小阴沟里翻船,郁闷中然后查文档解决之
- ADO方式连接带有密码的Access数据库文件(VC、Delphi)
- MFC 中ADO方式操作ACCESS数据库
- C/C++/Fortran混合编程浅谈(一)直接链接方式
- 链接脚本语言和C/C++之间的最好的工具:SWIG
- VC++中使用ADO方式操作ACCESS数据库
- VC++中使用ADO方式操作ACCESS数据库
- VC++中使用ADO方式操作ACCESS数据库(转载)
- 当程序用ado的jet4.0方式连接的时候,对于设有access数据库密码的mdb的访问居然报错“无法启动应用程序,工作组信息文件丢失,或是已被其他用户已独占方式打开”,而用odbc方式不报错,小阴沟里翻船,郁闷中然后查文档解决之
- VC++中使用ADO方式操作ACCESS数据库
- VC++中使用ADO方式操作ACCESS数据库
- VC++中使用ADO方式操作ACCESS数据库
- VC++6.0中使用ADO方式操作ACCESS数据库(转载)
- 【C++程序设计语言A视频教程 全12讲 中科院】【下载链接】