void CMainFrame::OnConnectdb() 
{
// TODO: Add your command handler code here
CConnectDB conn;
if(conn.DoModal()==IDOK)
{
_ConnectionPtr pConn;
::CoInitialize(NULL);
try
{
pConn.CreateInstance("ADODB.Connection");  

CString sql;
         sql.Format("Provider=SQLOLEDB;SERVER=%s;DATABASE=%s;UID=%s;PWD=%s;",
conn.GetServerIP(),conn.GetDBName(),conn.GetUserName(),conn.GetPassword());
pConn->Open((_bstr_t)sql," "," ",-1);
}
catch(_com_error e)
{
AfxMessageBox((CString)e.ErrorMessage()+"  连接数据库失败!");
return;
}
 AfxMessageBox("连接数据库成功!",MB_OK | MB_ICONINFORMATION);
}
}
数据库连接出错,麻烦高人指点一下(编译没有错,执行时出错)
显示的错误是:IDispatch error #3149 连接数据库失败

解决方案 »

  1.   

    应该就是你连接数据库那个SQL语句错了 
    你设定断点跟一下sql.Format...这句执行完毕后是不是得到正确的SQL 语句 ,我觉得肯定不是, 问题应该就出在这。另外可以通过查询分析器来看SQL语句语法是否正确 
      

  2.   


    CoInitialize(NULL);
    pConn.CreateInstance(__uuidof(Connection));
    pRst.CreateInstance(__uuidof(Recordset));
    pConn->ConnectionTimeout=5;
    //连接sqlserver串

    pConn->ConnectionString="Provider=SQLOLEDB.1;Password=sa;Persist Security Info=False;User ID=sa;Initial Catalog=yalong;";

    try
    {
    pConn->Open("","","",adConnectUnspecified);
    }
    catch (...)
    {
    MessageBox(NULL,TEXT("连接服务器失败!"),TEXT("提示"),MB_OK);
    }

    if(!pConn->State)
    {
    MessageBox(NULL,TEXT("打开数据库失败!"),TEXT("数据库提示"),MB_OK);
    }
      

  3.   

    再就是检查 conn.GetServerIP(),conn.GetDBName(),conn.GetUserName(),conn.GetPassword())这几个得到的ip,dbname,username,password是否正确   该用户是否有权限访问数据库等
      

  4.   

    最前面是哪里?只要在使用ADO对象指针之前初始化就应该没问题,我试过,结果一样