1、ADO对象及其智能指针
ADO是进行SQL Server数据访问的最常用的方式。ADO中与数据库相关的对象主要有三个:连接对象 Connection、记录集对象 Recordset 和命令对象 Command,它们对应的智能指针分别是_ConnectionPtr、_RecordsetPtr、_CommandPtr。其中 Connection 对象是其余两个对象的基础,也就是说在使用 Recordset 和 Command 对象之前,必须先使用 Connection 对象对数据库进行连接,成功建立了连接之后才能对数据库进行后续的增删查改操作。
2、使用 Connection 对象的 Open() 方法连接 SQL Server
要使用 ADO 对象,需要先在 stdafx.h 中通过下面的代码导入msado15.dll 库,该库包含了所有 ADO 对象的描述和声明。
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename ("EOF", "adoEOF")
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 阻止其它程序或对象以任何权限建立连接
Open() 方法的使用实例:
_ConnectionPtr m_pConn(__uuidof(Connection));
m_pConn.CreateInstance("ADODB.Connection")); // 创建 Connection 对象实例
try
{
_bstr_t strConnect = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=TestDataBase;Data Source=.";
HRESULT hResult = m_pConn->Open(strConnect, "", "", adModeUnknown);
}
catch (_com_error e)
{
AfxMessageBox(_T("Fail to connect SQL Server!"));
}
其中最容易出错的是 ConnectionString 字符串参数的使用,那么该如何确定该参数呢?有两种方法:
(1)根据具体的数据库连接参数一个一个地确定字符串中对应的部分,这种方法需要配置起来比较麻烦,容易出错,而且不便于立即测试是否可以连接;
(2)通过 udl 文件进行配置生成字符串参数,这种方法配置简单,而且可以立即测试是否可以连接,其具体步骤为:
① 新建一个 txt 文本文件,把后缀改为 udl ,右键 -> 属性 -> 提供程序 -> Microsoft OLE DB Provider for SQL Server -> 下一步,在“选择或输入服务器名称”中填入数据库所在的服务器名称 或者 IP地址,如果数据库在本地机,则直接输入点号(.)或127.0.0.1(注:当使用Windows 身份验证方式无法连接),在“输入登录服务器的信息”一栏,若使用“Windows 身份验证”方式登录数据库,则选择“使用 Windows NT 集成安全设置”,若使用 “SQL Server 身份验证” 方式登录数据库,则选择“使用指定的”用户名称和密码,并填入 用户名 和 密码 (如果这种方式不可用,可以参考这里更改服务器身份验证模式),然后在“在服务器上选择数据库”下拉菜单中选择要连接的数据库,点击 测试连接,如果弹出 测试连接成功,就说明数据库能够连接上,点击 应用/确定 保存连接参数;
② 用文本编辑器打开 udl 文件,最后一行字符串(Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=TestDataBase;Data Source=.)就是 ConnectionString 参数的值,复制到代码里就OK了。