连接代码如下:
void CMy123Dlg::InitSqlServer(CString server, CString db, CString UserName, CString Pwd)
{ AfxOleInit();
m_pConnection.CreateInstance("ADODB.Connection");    CString strCn;    strCn.Empty();
    strCn="provider=SQLOLEDB;data source="+server    +";initial catalog="+db    +";userID="+UserName    +";PassWord="+Pwd;    _variant_t bcnstr=_variant_t(strCn);    _variant_t bunstr=_variant_t(UserName);    _variant_t bpwdstr=_variant_t(Pwd);    //打开一个连接    try    {
    m_pConnection->Open(_bstr_t(bcnstr),_bstr_t(bunstr),    _bstr_t(bpwdstr),-1);//adOpenUnspecified    }    catch(_com_error e)    {    CString errormessage;    errormessage.Format("Warning: 连接数据库发生异常. 错误信息: %s; 文件: %s; 行: %d\n", e.ErrorMessage(), __FILE__, __LINE__);    AfxMessageBox(errormessage);    }    catch(...)    {    AfxMessageBox("Warning :连接数据库时发生未知错误");    }   }错误是:Warning: 连接数据库发生异常. 错误信息: 未指定的错误。
请各位大侠指教

解决方案 »

  1.   

    建议你重新封装为CADOConnection CADORecordSet  CADOCommand
    另外,记得在实例中 初始化Com库(构造函数中),在你这个函数中初始化不行的
      

  2.   


    我是个菜鸟不懂怎么重装这些东西
    Com已经初始化了还用请问下:
    strCn="provider=SQLOLEDB;data source="+server  +";initial catalog="+db  +";userID="+UserName  +";PassWord="+Pwd;
    这里的server 是什么啊,我填的是“127.0.0.1”   可以吧?
      

  3.   

         如果数据库在本地的话,Data Source写个.就可以了。
      

  4.   

    修改你的连接串:
    strCn.Format("Provider=SQLOLEDB.1;Data Source=%s;Initial Catalog=%s;User ID=%s;PWD=%s", server, db, UserName, Pwd);m_pConnection->Open(_bstr_t(strCn), "", "",adModeUnknown);如果你的数据库端口是1433的话,这样肯定没有问题。
      

  5.   

    BOOL CLeesConnection::OpenConnection(DATABASETYPE dtType,CString sServer,CString dbSrc,CString sUser,CString sPassword,BOOL isLocalConnect)
    {
    // 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
    // 因为它有时会经常出现一些意想不到的错误。
    CString strConn;
    try  
    {
    switch(dtType)
    {
    case MSACCESS:
    strConn = _T("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=") + dbSrc;
    if (sPassword != _T(""))  
    {  
    strConn += _T(";Jet OLEDB:Database Password=") + sPassword + _T(";");  

    break;
    case ORACLE:
    strConn = _T("Provider=MSDAORA;Data Source=") + sServer + _T(";User ID=") + sUser
    + _T("; Password=") + sPassword;
    break;
    case MSSQL2000:
    case MSSQL2005:
    case MSSQL2008:
    if(!isLocalConnect)
    {
    strConn = _T("Provider=SQLOLEDB.1; Data Source=") + sServer +
    _T("; Initial Catalog=") + dbSrc +  
    _T("; User ID=") + sUser +  
    _T("; PWD=") + sPassword; 
    }
    else
    {
    strConn = _T("Provider=SQLOLEDB.1; Data Source=") + sServer +
    _T("; Initial Catalog=") + dbSrc +  
    _T("; Integrated Security=True");
    }
    break;
    default:
    return FALSE;
    break;
    }//枚举数据库中的表,保存到CStringArray数组中——m_arTables
    if(m_pConnection->Open((_bstr_t)strConn,"","",adModeUnknown) == S_OK)
    {_RecordsetPtr m_pRecordset;
    m_pRecordset.CreateInstance(__uuidof(Recordset));
    IADORecordBinding *picRs = NULL;
    m_pRecordset.QueryInterface(__uuidof(IADORecordBinding), (LPVOID*)&picRs);
    m_pRecordset = m_pConnection->OpenSchema(adSchemaTables);//枚举表的名称处理
    while(!(m_pRecordset->adoEOF))
    {
    CString strTableType;
    _bstr_t table_name = m_pRecordset->Fields->GetItem(_T("TABLE_NAME"))->Value;//获取表的名称
    _bstr_t table_type = m_pRecordset->Fields->GetItem(_T("TABLE_TYPE"))->Value;//获取表的类型
    strTableType.Format(_T("%s"),(LPCSTR) table_type);
    if(!lstrcmp(strTableType,_T("TABLE")))
    {
    #ifndef UNICODE 
    m_arTables.Add((LPCSTR) table_name);//添加表的名称
    #else
    m_arTables.Add((LPCTSTR)table_name);
    #endif
    }
    m_pRecordset->MoveNext();
    }return TRUE;
    }
    }
    catch(_com_error e)
    {
    char chs[1024]={0};
    sprintf(chs,"Warning: CLeesConnection::OpenConnection 方法发生异常. 错误信息: %s; 文件: %s; 行: %d\n%s\n", e.ErrorMessage(), __FILE__, __LINE__,strConn);
    theService->LogEvent(EVENTLOG_ERROR_TYPE,989,chs);
    TRACE(_T("Warning: OpenConnection 方法发生异常. 错误信息: %s; 文件: %s; 行: %d\n"), e.ErrorMessage(), __FILE__, __LINE__);
    }
    return FALSE;
    }