Connection对象的属性有如下几个:
1.ConnectionString属性:是连接字符串,通过传递包含一系列由分号分隔的“argument=value”语句的详细连接字符串,可指定用于建立连接数据源的信息。连接串格式根据数据源的不同有所不同。
2.Open方法:建立到数据源的物理连接。
Open函数详细定义:
HRESULT Open (_bstr_t ConnectionString,
_bstr_t UserID,
_bstr_t Password,
long Options)
参数意义:
ConnectionString :可选,类型为字符串,包含连接信息,如果设置了ConnectionString属性,该参数可以不设置
UserID:可选,字符串,包含建立连接时所使用用户名,如果没有用户名,可以不设置
Password:可选,字符串,包含建立时所使用的密码。如果没有密码,可以不设置
Option:可选,决定该方法是在连接建立之后(异步)还是连接建立之前(同步)返回,
其值定义如下
enum __declspec(uuid("00000541-0000-0010-8000-00aa006d2ea4"))
ConnectOptionEnum
{
adConnectUnspecified = -1, //已同步方式连接数据库
adAsyncConnect = 16 //以异步方式连接数据库
};
Option,还有一种解释:
enum __declspec(uuid("00000521-0000-0010-8000-00aa006d2ea4"))
ConnectModeEnum
{
adModeUnknown = 0, //缺省。当前的许可权未设置
adModeRead = 1, //只读
adModeWrite = 2, //只写
adModeReadWrite = 3, //读写方式打开
adModeShareDenyRead = 4, //阻止其它Connection对象以读权限打开连接
adModeShareDenyWrite = 8, //阻止其它Connection对象以写权限打开连接
adModeShareExclusive = 12, //阻止其它Connection对象以读写权限打开连接
adModeShareDenyNone = 16, //阻止其它Connection对象以任何权限打开连接
adModeRecursive = 4194304 //
};
3.ConnectionTimeout属性:该属性指示在终止尝试和产生错误前建立连接期间所等待的时间。该属性值为长整型数,单位s,默认值为15。如果设为0,则ADO无限等待直到打开。需要在Open之前调用。
m_pConnection->ConnectionTimeout = 5;///设置超时时间为5秒
4.State属性:指明当前Connection对象的状态,0表示关闭,1表示已经打开,我们可以通过读取这个属性来作相应的处理,例如:
if(m_pConnection->State)
m_pConnection->Close(); ///如果已经打开了连接则关闭它
状态值有如下定义
enum __declspec(uuid("00000532-0000-0010-8000-00aa006d2ea4"))
ObjectStateEnum
{
adStateClosed = 0, //关闭状态
adStateOpen = 1, //打开状态
adStateConnecting = 2, //连接状态
adStateExecuting = 4, //执行状态
adStateFetching = 8
};
5.Execute方法:函数原型
_RecordsetPtr Connection15::Execute ( _bstr_t CommandText, VARIANT * RecordsAffected, long Options )
其中CommandText是命令字串,通常是SQL命令。参数RecordsAffected是操作完成后所影响的行数, 参数Options表示CommandText中内容的类型,Options 其值定义如下
enum __declspec(uuid("0000052e-0000-0010-8000-00aa006d2ea4"))
CommandTypeEnum
{
adCmdUnspecified = -1,
adCmdUnknown = 8, //表明CommandText内容未知
adCmdText = 1, //表明CommandText是文本命令,即SQL语句
adCmdTable = 2, //表明CommandText是一个表名
adCmdStoredProc = 4, //表明CommandText是一个存储过程
adCmdFile = 256, //
adCmdTableDirect = 512
};
返回值:
Execute()函数执行完后返回一个指向记录集的指针
6.Close方法:用来关闭到数据源的连接,访问数据库完成后,关闭连接,释放有关联的系统资源。关闭对象并不代表将它从内存中删掉,可以更改它的属性设置然后再次打开它。
数据库建立连接实例:
#include "stdafx.h"
#include "DataBase.h"
#import "C:\Program Files\Common Files\system\ado\msado15.dll" \
no_namespace rename("EOF", "adoEOF") rename("BOF", "adoBOF")
int main()
{
::CoInitialize(NULL);
_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordSet;
try
{
m_pConnection.CreateInstance(__uuidof(Connection));
m_pRecordSet.CreateInstance(__uuidof(Recordset));
assert(NULL != m_pConnection);
assert(NULL != m_pRecordSet);
if (NULL == m_pRecordSet
|| NULL == m_pConnection)
{
cout << "创建实例失败" << endl;
return -1;
}
m_pConnection->CommandTimeout = 5;
m_pConnection->ConnectionString = "Provider=SQLOLEDB.1;Password=123456;Persist Security Info=True;User ID=sa;Initial Catalog=sample_db;Data Source=127.0.0.1";
m_pConnection->Open("","", "", adConnectUnspecified);
assert(m_pConnection->GetState() == adStateOpen);
if (m_pConnection->GetState() != adStateOpen)
{
cout << "连接失败" << endl;
}
_variant_t var;
m_pRecordSet = m_pConnection->Execute("Select * from AccountsInfo", &var, adCmdText);
cout << (int)var << endl;
cout << m_pRecordSet->GetFields() << endl;
string szLogonID = (_bstr_t)m_pRecordSet->GetCollect("LogonID");
string szNickName = (_bstr_t)m_pRecordSet->Fields->GetItem("NickName")->Value;
cout << szLogonID << endl;
cout << szNickName << endl;
}
catch (_com_error& e)
{
cout << e.Description() << endl;
}
::CoUninitialize();
return 0;
}
注意:
1.Recordset对象和Command对象使用Open方法的第二个参数要用到_ConnectionPtr.GetInterfacePtr()函数返回值
2.执行Execute方法。m_pConnectionPtr->Execute(_bstr_t(sql),&RecordsAffected,adCmdText);其中RecordsAffected为_variant_t对象。