我用ADO连接数据库,用的是UDL链接,编译的时候总是报错说是未发现数据源名称且未指定默认驱动程序 后来发现说是udl格式的文件是unicode的,不能读取。好像vc6.0不支持这样格式的udl文件吧,我重装了vc把所有的选项都选了,可还是不行急请高手指教!
//初始化数据库连接
HRESULT hr;
try
{
//实例化连接对象
hr = m_pConnection.CreateInstance(__uuidof(Connection));
if(SUCCEEDED(hr))
{
//设置连接串属性为UDL文件
m_pConnection->ConnectionString = "File Name = my_datal.udl";
//设置等待连接打开的时间为20s
m_pConnection->ConnectionTimeout = 20;
hr = m_pConnection->Open("","","",adConnectUnspecified);
if(FAILED(hr))
{
AfxMessageBox("open fail!");
return TRUE;
}

else
{
AfxMessageBox("createinstance of Connection fail!");
return TRUE;
}
}
catch (_com_error e)
{
//给出异常
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description()); AfxMessageBox(bstrSource+bstrDescription);
return TRUE;
}

解决方案 »

  1.   

    >ConnectionString = "File Name = my_datal.udl";
    >...
    >hr = m_pConnection->Open("","","",adConnectUnspecified);
    -----------------------------
    看你用的字符串都还是普通的, 连个 _T 之类的宏都没有, 由此可见, 你并没有把项目设置成 _UINCODE 的版本形式。
      

  2.   

    参考下面的,设置一下:
    http://community.csdn.net/Expert/TopicView.asp?id=5156340
      

  3.   

    m_pConnection->ConnectionString = "File Name = my_datal.udl";
    这一句有两个错误
    1等于号左右的空格要去掉
    2udl文件要写绝对路径。如果要知道当前程序文件所在路径
    GetModuleFilename(NULL...)得到当前程序文件所在路径,然后从中提取出来char   *str   =   new   char[256];     
    TCHAR tPath[MAX_PATH];
    memset(tpath,0,sizeof(tPath)*sizeof(TCHAR));
    ::GetModuleFileName(NULL,tPath,MAX_PATH);CString str=tPath;int i=str.ReverseFind("\\");
    if (i!=-1)
    {
    str=str.Mid(0,i);
    }
    str="File Name=" + str + "\\db.udl";
      

  4.   

    虽然udl是unicode存储的,但你的问题和unicode关系不大,因为数据库链接字符串中的空格和路径不对
      

  5.   

    if(FAILED(::CoInitialize(NULL))) 
    return; 
    try
    {
    _ConnectionPtr  pConn  = NULL ;
    _RecordsetPtr  pRs  = NULL ;
    _RecordsetPtr  pRs2  = NULL ;
    _CommandPtr comm = NULL ;
    _ParameterPtr param =NULL ;
    HRESULT  hr = S_OK; _bstr_t strCnn("File Name=c:\\db.udl");
    pConn.CreateInstance(__uuidof(Connection));
    pConn->CursorLocation =adUseClient;
    pConn->ConnectionTimeout =60; pConn->Open (_bstr_t(strCnn),_bstr_t(""),_bstr_t(""),adModeUnknown); if (pConn)
    if (pConn->State == adStateOpen)
    pConn->Close();
    }
    catch (_com_error pCome)
    {
    TRACE("Error info: %s \n", (LPCTSTR)(pCome.Description()));}::CoUninitialize();
      

  6.   

    _ConnectionPtr  pConn  = NULL ;
    _RecordsetPtr  pRs  = NULL ;
    _RecordsetPtr  pRs2  = NULL ;
    _CommandPtr comm = NULL ;
    _ParameterPtr param =NULL ;
    HRESULT  hr = S_OK;_bstr_t strCnn("File Name=c:\\db.udl");
    pConn.CreateInstance(__uuidof(Connection));
    pConn->CursorLocation =adUseClient;
    pConn->ConnectionTimeout =60;pConn->Open (_bstr_t(strCnn),_bstr_t(""),_bstr_t(""),adModeUnknown);