void CAasdDlg::OnButton1()  

_ConnectionPtr m_pConnection; //创建智能指针
m_pConnection.CreateInstance(_uuidof(Connection)); CoInitialize(NULL); //初始化COM
try  
{  
//连接字符串,pubs为数据库名 
m_pConnection->ConnectionString="Provider=SQLOLEDB.1;Password=21259520q;Persist Security Info=True;User ID=sa;Initial Catalog=pubs";  
m_pConnection->Open(" "," "," ",adConnectUnspecified); //调用Open方法 }  
catch(_com_error e) //捕获连接异常 
{  
return ;  

_RecordsetPtr m_pRecordset(_uuidof(Recordset)); 
_CommandPtr m_pCommand(_uuidof(Command)); //查询 
m_pCommand->put_ActiveConnection(_variant_t((IDispatch*)m_pConnection)); 
m_pCommand->CommandText="select * from authors";    //authors为表名 
m_pRecordset=m_pCommand->Execute(NULL,NULL,adCmdText); 
//写进list 
while(!m_pRecordset->adoEOF) 

((CListBox*)GetDlgItem(IDC_LIST1))->AddString( 
(_bstr_t)m_pRecordset->GetCollect("au_lname")); 
m_pRecordset->MoveNext(); 
} m_pRecordset->Close(); 
m_pConnection->Close(); 
m_pCommand.Release(); 
m_pRecordset.Release(); 
m_pConnection.Release(); CoUninitialize(); 
// TODO: Add your control notification handler code here }    读取默认SQL数据库中pubs文件   author表里的数据并输出到列表框里 编译成功但是无法读取? 什么地方错了?搞不清楚,查半天了。 
 
 

解决方案 »

  1.   

    你会调试吗?调试过了吗?m_pRecordset中有数据吗?
    ((CListBox*)GetDlgItem(IDC_LIST1))->AddString( 
    (_bstr_t)m_pRecordset->GetCollect("au_lname")); 
    这样的代码很差的,是不可取的。你根本就没有办法调试它。将它拆分开,然后看每一步是否得出正确的数据。
      

  2.   

    你的串不对。还缺少数据库服务器的名称啊。
    csConnect.Format("Provider=SQLOLEDB.1;Password=%s;Persist Security Info=True;User ID=%s;Initial Catalog=%s;Data Source=%s"
    ,dbConfig.m_sHostPass,dbConfig.m_sHostUser,dbConfig.m_sDBName,dbConfig.m_sHostName);
    其中Initial Catalog是数据库名称,Data Source是数据库服务器名称
      

  3.   

    我在开始-控制面板-管理工具-数据源里添加了数据源
    名字叫sqlse,测试连接也成功了,代码改成
    m_pConnection->ConnectionString="Provider=SQLOLEDB.1;Persist Security Info=True;Initial Catalog=pubs;Data Source=sqlse;User ID=sa;Password=21259520q";还是无法连接上啊
      

  4.   

    如果直接把Data Source=服务器名   也是没有用的
      

  5.   

    Data Source是指数据库服务器名称,不是数据源。明白么?就是安装SQL SERVER的计算机名称
      

  6.   

    是啊,上面我说了Data Source= 服务器名也没用,就是无法连接的上 
    郁闷了  GHOST-7642677BD就是服务器名
    m_pConnection->ConnectionString="Provider=SQLOLEDB.1;Persist Security Info=True;Initial Catalog=pubs;Data Source=GHOST-7642677BD;User ID=sa;Password=21259520q"; 难道是Open方法有错
    m_pConnection->Open(" "," "," ",adConnectUnspecified); 去查查用法去先破书受不了,什么都不讲的
      

  7.   

    问你一个问题,你的SQL 服务器打开了没?
      

  8.   

    如果你的SQL服务器所对应的用户没有打开的话,
       那你再怎么改代码也是没有用的..
      

  9.   

    服务器已经打开
    修改后的连接代码为
    _ConnectionPtr m_pConnection; //创建智能指针
    m_pConnection.CreateInstance(_uuidof(Connection));
    CoInitialize(NULL);//初始化COM
    try 

    //连接字符串,pubs为数据库名
    m_pConnection->ConnectionString="Provider=SQLOLEDB.1;Persist Security Info=false;Initial Catalog=pubs;Data Source=GHOST-7642677BD;User ID=sa;Password=21259520q";
    m_pConnection->Open(" "," "," ",adConnectUnspecified); //调用Open方法

    catch(_com_error e) //捕获连接异常

    MessageBox("数据库连接失败","警告",MB_OK);
    return ; 
    }仍然连接不上,找了很久服务器名,SQL SERVER用户名 密,数据库名都写好了,仍然无法打开这个实在找不出错误了,open的方法问题还是定义指针存在问题?
      

  10.   

    那用IP地址试试。另外在catch中,看一下e的错误报告,到底是什么错误
      

  11.   

    连接的话,关于sql server方面需要有什么设置不?
      

  12.   

    CoInitialize(NULL); //初始化COM 
    把这句放在最前面执行,哥们
      

  13.   

    Data Source是指数据库服务器名称,不是数据源
      

  14.   

    CoInitialize(NULL); //初始化COM
    放在前面的话  开始连接后停顿好几秒后才弹出 连接失败
    如果放在后面就立刻弹出失败消息框
    放在前面也没用的。。
      

  15.   

    catch里面看看
     _bstr_t bstrSource(e.Source());
       _bstr_t bstrDescription(e.Description());
        // Print COM errors. 
       printf("Error\n");
       printf("\tCode = %08lx\n", e.Error());
       printf("\tCode meaning = %s\n", e.ErrorMessage());
       printf("\tSource = %s\n", (LPCSTR) bstrSource);
       printf("\tDescription = %s\n", (LPCSTR) bstrDescription);
      

  16.   

    恩,找别人测试一下这代码,可以连接上本地数据库
    我这个密码就是21259520q 用户名sa
    连接不上为什么
    需要怎样配置呢。
      

  17.   

    问题已解决,把
    m_pConnection->ConnectionString="Provider=SQLOLEDB.1;Persist Security Info=false;Initial Catalog=pubs;Data Source=GHOST-7642677BD;User ID=sa;Password=21259520q"; 
    m_pConnection->Open(" "," "," ",adConnectUnspecified); //调用Open方法 改为 
    _bstr_t strConnect="Provider=…………";
    m_pConnection->Open(strConnect,"","",adModeUnknown);就OK啦