用ADO通过DSN动态连接数据库时:(MFC基于对话框 )
//stdafx.h
#import "c:/program files/common files/system/ado/msado15.dll" no_namespace rename("EOF","adoEOF")
//主程序初始化函数
BOOL CADO2App::InitInstance()
{
AfxEnableControlContainer();
AfxOleInit();//初始化COM库
首先添加一个对话框,然后调用该对话框初始化的时候读取DSN名字
//把DSN名字显示到列表框中 列表框ID :IDC_DSN_LIST
((CListBox*)GetDlgItem(IDC_DSN_LIST))->ResetContent();
HKEY hKey;
RegOpenKeyEx(HKEY_CURRENT_USER,"Software//ODBC//ODBC.INI//ODBC Data Sources",0,KEY_READ,&hKey);
DWORD dwKeyCount;
DWORD dwMaxKeyNameLength;
RegQueryInfoKey(hKey,NULL,NULL,NULL,NULL,NULL,NULL,&dwKeyCount,&dwMaxKeyNameLength,NULL,NULL,NULL);
char* szKeyName = new char[dwMaxKeyNameLength+1];
DWORD dwKeyName;
for (long index=0;index<(long)dwKeyCount;index++)
{
RegEnumValue(hKey,index,szKeyName,&dwKeyName,NULL,NULL,NULL,NULL);
CString DSNName;
DSNName.Format("%s",szKeyName);
((CListBox*)GetDlgItem(IDC_DSN_LIST))->AddString(DSNName);
}
delete szKeyName;
RegCloseKey(hKey);
然后单击选择例表框内容,然后把选种的内容记录成CString m_strDSNName
最后通过ado连接来实现动态连接到数据源
HRESULT hr;
try
{
hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
if(SUCCEEDED(hr))
{
hr = m_pConnection->Open("DSN="+"_bstr_t(m_strDSNName),"","",0);
}
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!/r/n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
return FALSE;
}
如果是本地Access数据库则直接可以通过添加CFileOpen()来直接选择access文件
记录选择的数据库路径和名字
hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=数据库.mdb","","",adModeUnknown);
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/coffeaddice/archive/2007/11/06/1869881.aspx