代码如下
::CoInitialize(NULL);
HRESULT hr;
_bstr_t source(L"Driver={SQL Server};Server=DATASERVER;DATABASE=XXX;UID=infered1;PWD=123");
_bstr_t user(L"");
_bstr_t pwd(L"");
try
{
  hr = m_connection.CreateInstance(_uuidof(Connection));
if (SUCCEEDED(hr))
{
hr = m_connection->Open(source,user,pwd,adModeUnknown);
}
if (SUCCEEDED(hr))
{
hr = m_recordset.CreateInstance(_uuidof(Recordset));
}
if (SUCCEEDED(hr))
{
m_fConnected = TRUE;

else
{
m_fConnected = FALSE;
}
}
catch (_com_error &e)
{
MessageBox(e.ErrorMessage());
m_fConnected = FALSE;
}
if (!m_fConnected)
{
MessageBox("ado数据源初始化失败!");

else
{
m_strSource = (const char*)source;
}
运行后总是报“未指定的错误”,连接字符串好像没有错,各种字符串都试过了。修改密码貌似也会报同样的错误,说明没有进行密码登陆验证。hr = m_connection->Open(source,user,pwd,adModeUnknown);如果最后一个参数admodeunknown改成16的话(即异步方式)可以成功建立连接,但是hr = m_recordset.CreateInstance(_uuidof(Recordset));又报错。我用下的其他程序测试也是连不上本地的数据库,1433端口之类的都打开了。完全不知道是出了什么错,感觉好像是SQL server的问题。向各位大牛请教,感激不尽!

解决方案 »

  1.   

    //建立数据库连接字符串,可以用个保险的方法。 
    //1、建立一个.udl文件,双击打开; 
    //2、在【提供程序】中选择 【Microsoft.Jet.OLEDB.4.0 OLE DB Provider】 
    //3、在【连接】中,输入数据库名称 
    //4、在【所有】中,编辑Jet OLEDB:Database Password的值 
    //5、测试连接,如果通过,则用记事本打开udl文件,拷贝出连接字符串。 
      

  2.   

    ConnectionString="Provider=SQLOLEDB.1;Persist Security Info=false;Initial Catalog=pubs;Data Source=GHOST-7642677BD;User ID=sa;Password=sa";  
      

  3.   


    try
    {
      CoInitialize(NULL); //初始化COM 这个加了码  hr = m_connection.CreateInstance(_uuidof(Connection));
      

  4.   


    恩 ,给出的代码第一行就是。我感觉好像是SQL server的配置或者是 ADO安装不对,但是SQL server那边的配置能改的都改了,用您刚才.udl文件测试连接也是没有问题的。可能是ADO不对,
    我是在STDAFX.H中加入#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
    不知道对不对。