1。首先,我们必须建立一个VC的工程。建立VC工程很简单,只要如下操作即可。
1. 运行VC,菜单->File->New->Projects,然后选择MFC AppWizard(exe),然后填好工程名称,点击OK。
2. 选择应用程序类型为Dialog based。
3. 点击Finish,完成。
2。导入ADO。在VC环境下,一般来说,我们都是用的ADO来连接数据库的。
在StdAfx.h(这是一个VC的全局头文件,默认每个CPP文件都要引用它),添加如下代码:
#import "c:program filescommon filessystemadomsado15.dll" no_namespace
rename ("EOF", "adoEOF")
rename ("BOF", "adoBOF")
请确认在你的系统中存在msado15.dll这个DLL,它的位置应该与上面的路径一直,它是ADO的库文件。
如果编译不过,而且提示是一些如error C2011: 'LockTypeEnum' : 'enum' type redefinition的重定义,那么请删除以下的代码:
#ifndef _AFX_NO_DAO_SUPPORT
#include <afxdao.h> // MFC DAO database classes
#endif // _AFX_NO_DAO_SUPPORT
3。初始化ADO。
::CoInitialize(NULL); // 初始化COM,ADO是一个COM组件。
_ConnectionPtr opConn; // 连接
opConn.CreateInstance(__uuidof(Connection)); // 初始化一个连接
CString strConnect; // 格式化连接
strConnect.Format("Provider=MSDASQL.1;Driver={%s};Server=%s;DataBase=%s;UID=%s;PWD=%s;",
strDriver,
strServerPath,
strDb,
strUid,
strPwd);
opConn->Open(_bstr_t(lpczConn), "", "", adConnectUnspecified); // 打开连接
// 干活,现在可以使用ADO中的其他对象了,比如_RecordsetPtr等
_RecordsetPtr opSet;
CString strSQL;
// tb_idealsoft
// +---------------+---------------+
// | Numb(int) | Name(varchar) |
// +---------------+---------------+
strSQL.Format("SELECT * FROM tb_idealsoft");
_variant_t vtConn = _variant_t(opConn, true);
opSet->PutCursorLocation(adUseClient); // 设定游标
opSet->Open(_variant_t((LPCTSTR)strSQL), vtConn, adOpenStatic, adLockOptimistic, adCmdText); // 执行SQL语句,打开记录集
long lCount = opSet->GetRecordCount(); // 表中记录的数目
opSet->MoveFirst(); // 到记录集的第一行
for(int i = 0; i < lCount; i++)
{
_variant_t vt = _m_opSet->GetCollect(_variant_t(_T("Name")));
// 由于Name这个域是字符串,所以需要将vt转化成字符串
// 在此,我们有必要解释一下_variant_t这个怪物,它的确是个怪物。微软,就是一个恐龙园,
// 经常会放出一些莫名其妙的数据结构。
// 其实_variant_t与其说是一个class,还不如说它是一个union,其实在它的基类tagVARIANT中,的确
// 存储了一个union,用来存放数据,而_variant_t其实就是对这个union的进一步封装。
// 之前,微软似乎试图用它来统一所有变量的存储与访问,但始终不很成功,主要是这个东西实在是
// 太抽象了,但是ADO的成功推广却意外的使这个畜生逐渐成名。当然,主要还是令人厌恶。
// 在_variant_t中有一个变量叫做vt,它是用来记录变量类型的,根据变量的类型,我们可以把_variant_t
// 转化成不同的数据类型。
// _variant_t v;
// 比如当前vt = VT_I1(说明此时_variant_t代表了一个char型数据,具体的定义可以参看oaidl.h),我们可以
// 这样来转换:char ch = v.cVal;
// 如果当前的vt = VT_LPSTR,表明当前的_variant_t代表了一个char*型数据。
// 从而我们可以这样转换:char* psz = v.pcVal;
// ……
// 好了,现在可以将这个vt转换为char*然后将它保存起来了
// ……
opSet->MoveNext();
}
// 完事了,打扫战场
opSet->Close();
// 现在插入一条数据,我们使用_ConnectionPtr的Execute接口
// int nNumb = 12;
// CString strName("南京");
strSQL.Format("INSERT INTO tb_idealsoft(Numb, Name) VALUES(%d, '%s')", nNumb, strName); // 注意字符串型变量要用单引号括起来
// _variant_t vtEffe
opConn->Execute(_bstr_t(strSQL), &vtEffe, adCmdText);
long nEffe = vtEffe.lVal; // 被影响的行数
// ……
// 关闭,释放资源
opConn->Close();
::CoUninitialize();
-------- Access数据库的连接字符串格式 --------------------------------------
CString strConnect = _T("Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin; Data Source=") + strDbPath + _T(";");
if( BARE != strPsw )
{
strConnect += _T("Jet OLEDB:Database Password=") + strPsw;
}
转自:
http://hi.baidu.com/idealsoft/blog/item/d8152d03ba5773703812bb0d.html