以ado方式链接sqlserver数据库和access数据库 语言:c++

关于基本介绍转自: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();
}










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值