最近在改一个VC的项目,需要灵活的配置数据库连接,我用到了数据链接文件,使用UDL文件必须在系统中先安装Microsoft MDAC,Win 2000以后的版本中都自动包含了该组件。关于UDL的使用只强调两点。
m_pConnection->ConnectionString = "File Name = my_datal.udl";
这一句有两个错误
1、等于号左右的空格一定要去掉,即:
m_pConnection->ConnectionString = "File Name=my_datal.udl";
2、UDL文件最好要写绝对路径,否则可能出现0X80030002的未知错误。即:
m_pConnection->ConnectionString = "File Name=D://my_datal.udl";
最好是使用GetModuleFilename(NULL...)得到当前程序文件所在路径,然后从中提取出所在路径,我写的连接部分代码,UDL文件和程序可执行文件在同一目录下。
- try
- {
- char dbfName[MAX_PATH];
- GetModuleFileName(NULL,dbfName,MAX_PATH);
- char *pstr = strrchr(dbfName,'//');
- if (pstr != NULL)
- {
- *pstr = '/0';
- strcat(dbfName,"//conn.udl");
- }
- CString sConn;
- sConn.Format("File Name=%s",dbfName);
- hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
- if(SUCCEEDED(hr))
- {
- m_pConnection->Open(_bstr_t(sConn),"","",adModeUnknown);
- m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb","","",adModeUnknown);///连接数据库
- }
- }
- catch(_com_error e)///捕捉异常
- {
- CString errormessage;
- errormessage.Format("连接数据库失败!/r/n错误信息:%s",e.ErrorMessage());
- AfxMessageBox(errormessage);///显示错误信息
- return FALSE;
- }