您的位置:首页 > 编程语言 > C语言/C++

以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();
}










                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐