本人是个新手,想用ADO连接SQL Server数据库,按照书上写了这样一段代码:
#include "stdio.h"
#import "C:\\Program Files\\Common Files\\System\\ado\\msado25.tlb" no_namespace rename("EOF","ENDOFRS")
int main()
{
::CoInitialize(0);
_ConnectionPtr pConn;
pConn.CreateInstance(__uuidof(Connection));//创建连接对象
pConn->ConnectionString = "Provider=SQLOLEDB.1;Password=123456;Persist Security Info=True;User ID=sa;Initial Catalog=考试系统;Data Source=127.0.0.1";//设置连接字符串
pConn ->ConnectionTimeout = 5;//设置连接的超时时间,可选
pConn ->CursorLocation = adUseServer;//设置光标的位置,可选
pConn ->Open("","","",-1);
_variant_t vt;
//得到一个记录集
_RecordsetPtr rs = pConn->Execute("select * from 考生信息",&vt,adCmdText);
//判定记录集是否到达末尾
while (!rs->ENDOFRS)
{
//得到记录的各个列的数据
_variant_t name= rs->Fields->GetItem("姓名")->Value;
char szname[51];
if (name.vt == VT_NULL)
{
strcpy(szname,"NULL");
}
else
{
//如何进行宽字符到ASCII字符的转换
::WideCharToMultiByte(CP_ACP,0,name.bstrVal,-1,szname,sizeof(szname),0,0);
}
printf("%s",szname);
}
pConn->Close();//关闭数据库连接
pConn.Release();//释放数据库连接对象
return 0;
}
在编译的时候没有报错,但是在运行的时候却什么也输出不了,用F10一步步的调试时候发现在
pConn.CreateInstance(__uuidof(Connection));//创建连接对象
这一步的时候pconn的值就是红色的字体,是不是根本就没有连接上对象呢?
请各位大哥指点,谢谢。
最好能有好心的大哥能给个QQ,不甚感激!!!!!

解决方案 »

  1.   

    加异常处理看下什么提示。 ::CoInitialize(0);
    _ConnectionPtr pConn;
    pConn.CreateInstance(__uuidof(Connection));//创建连接对象
    pConn->ConnectionString = "Provider=SQLOLEDB.1;Password=123456;Persist Security Info=True;User ID=sa;Initial Catalog=考试系统;Data Source=127.0.0.1";//设置连接字符串
    pConn ->ConnectionTimeout = 5;//设置连接的超时时间,可选
    pConn ->CursorLocation = adUseServer;//设置光标的位置,可选
    try
    {
    pConn ->Open("","","",-1);
    }catch(_com_error e)
    {
    MessageBox(NULL, e.Description(), e.ErrorMessage(), MB_OK);

    return 0;
    }
      

  2.   

    把这个::CoInitialize(0)改为:::CoInitialize(NULL)试试。
      

  3.   

    _ConnectionPtr pConn;
    pConn.CreateInstance(__uuidof(Connection));
    这两句可以写成一句:
    _ConnectionPtr pConn(__uuidof(Connection));
    然后调试看看是不是连接字串有问题。
      

  4.   

    #import "C:\\Program Files\\Common Files\\System\\ado\\msado25.tlb" no_namespace rename("EOF","ENDOFRS")
    导入.DLL文件看看。
      

  5.   

    有兴趣的话可以看看这个
    http://blog.csdn.net/xianglitian/archive/2010/05/22/5617173.aspx
      

  6.   

    pConn.CreateInstance(__uuidof(Connection));/
    继续往后单步调试,看后面哪行具体出问题..
      

  7.   

    没有问题,只是while中死循环了,加一句rs->MoveNext();
      

  8.   

    到messagebox那一行的时候提示是sql server不存在或拒绝访问,是什么情况?
      

  9.   

    连接字符串似乎不对
    我用
    pConn->ConnectionString = "Driver={SQL Server};DataBase=db;Server=192.168.0.190;uid=sa;pwd=sa;";//设置连接字符串可以连接成功。
      

  10.   

    用try catch把每条语句都包一下
    看看错误是什么
      

  11.   

    错误就是连接不上,提示是sql server不存在或拒绝访问
      

  12.   


    ...........
    192.168.0.190是我自己的SQL服务器IP。
    你不会自己根据自己的情况修改啊,
      

  13.   

    你的SQL是不是express的
    不是开发版吧
      

  14.   

    .......不好意思,我不知道我SQL的服务器IP啊...应该怎么查啊...
      

  15.   

    你连接本机不一定走IP吧
    试试这个字符串
    Provider=SQLOLEDB.1;Password=123456;Persist Security Info=True;User ID=sa;Initial Catalog=考试系统;Data Source=MICROSOF-47A2FF\\SQLEXPRESS;
    MICROSOF-47A2FF换成你的计算机名
      

  16.   

    2005分为企业版、开发版和演示版
    看看这个吧
    http://club.itqun.net/showtopic-68421.html
      

  17.   

    修改一下数据库的登录方式看一下,使用window和SQL server混合登录方式。
      

  18.   

    我建了一个udl测试连接不上,这是什么原因?
      

  19.   

    你的SQL服务端没连通,是SQL设置的问题,与验证方式有关。
      

  20.   

    m_pConnection.CreateInstance(__uuidof(Connection));
    m_pRecordset.CreateInstance(__uuidof(Recordset));
    m_pCommand.CreateInstance(__uuidof(Command));sServer="provider = sqloledb;server=192.168.0.1;database=mydata";
    sUserName="sa";
    sPwd="";
    m_pConnection->Open(_bstr_t(sServer),_bstr_t(sUserName),_bstr_t(sPwd),-1);
    这段代码在VC下用的,调整下你的连接字符串;但前提要测通自己的SQL SERVER.