romantic_allesa 2015-07-21 09:58 采纳率: 100%
浏览 1696
已采纳

关于VS2005对SqlServer数据库操作的问题

对数据库Student进行查询时运行到msado.tli文件中的下面这个函数中的raw_Open时就崩溃掉。

 inline HRESULT Recordset15::Open ( const _variant_t & Source, const _variant_t & ActiveConnection, enum CursorTypeEnum CursorType, enum LockTypeEnum LockType, long Options ) {
    HRESULT _hr = raw_Open(Source, ActiveConnection, CursorType, LockType, Options);
    if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
    return _hr;
}

调用代码:

        CString strsql = _T("select * from LoginInfo where Name='");
        strsql+=name;
        strsql+="' and Password='";
        strsql+=psw;
        strsql+="'";
        MessageBox(hwnd, strsql, _T("查询字符串"), MB_OK);
        CString strcolumn[6] = {_T("Name"),_T("Sex"),_T("Password"),_T("School"),_T("Major"),_T("Number")};
        int ncolumn = 6;
        CStringArray strvalue;
        theApp.m_dao.GetData(strsql,strcolumn,ncolumn,strvalue);
 BOOL CDao::GetData(CString strSql,CString *strQueryCloum,int nCloumNum,CStringArray& strDataValue)
{
    HRESULT het;
    //_bstr_t    字符串          _variant_t 多种数据类型集合 vt类型   ..value值                               //com
    _bstr_t bstrSql = strSql;               //执行sql
    _bstr_t bstrConnect = m_strConnect;     //连库串
    _bstr_t bstrQueryCloum;                 //列名

    Fields *fields;
    FieldPtr fieldPtr;

    CString strValue;
    _variant_t varBLOB;
    try
    {
        //1.打开表
        /*m_pRecordset->Open(查询SQL语句,连接串,打开方式,数据源更新时如何锁定结果集,以什么形式传入)
            打开方式:
            adOpenUnspecified = -1,  默认的方式打开
            adOpenForwardOnly = 0,    向前移动的游标打开
            adOpenKeyset = 1,         以键值打开
            adOpenDynamic = 2,        当你添加数据时别人也有可能往这个表添加数据,谁在前谁添加到前面(多人用数据库时)
            adOpenStatic = 3          别人也想往里面添加数据一直停留在打开时候

            锁定结果集方式:
            adLockReadOnly = 1,         只读的不能改变数据
            adLockPessimistic = 2,       (保守式锁定)逐个 – 编辑时立即锁定数据源的纪录
            adLockOptimistic = 3,        (开放式锁定)逐个 – 只在调用update方法时才锁定纪录
            adLockBatchOptimistic = 4     开方式 可以更新一批数据更新模式
            +       bstrConnect {"Driver={SQL Native Client};Server=192.168.1.92,2433;Uid=sa;Pwd=sa;Database=colin0716" (1)}    _bstr_t
            +       bstrSql {"select * from student" (1)}   _bstr_t

        */
        het = m_pRecordset->Open(bstrSql,bstrConnect,adOpenDynamic,adLockOptimistic,adCmdText);
        if (!SUCCEEDED(het))
        {
            AfxMessageBox(_T("打开表失败"));
            m_strErrorMsg = _T("查询表失败");
            return FALSE;
        }
        //循环结果
        while(!m_pRecordset->ADOEOF)
        {
                        //按行遍历
            for(int i=0;i<nCloumNum;i++)
            {
                bstrQueryCloum = strQueryCloum[i];
                fields = m_pRecordset->GetFields(); //fields 结果集中的字段集合。由于一行记录中可以包含多个字段,因此fileds属性是一个数组形式,数组中每一个元素代表一个字段

                fieldPtr = fields->GetItem(bstrQueryCloum);//field对象表示记录集中数据的某个单独的列。

                varBLOB = fieldPtr->GetValue();//获得当前列的值

                //long nSize =fieldPtr->ActualSize;


                //注意图片名称必须为图片流的前一个字段
                //strValue = DataToCStringType(varBLOB,nSize,strValue);
                strValue = DataToCStringType(varBLOB);
                strDataValue.Add(strValue);
                //varBLOB.Detach();
            }
            m_pRecordset->MoveNext();
        }

        m_pRecordset->Close();
    }
    catch(_com_error *e)
    {
        m_strErrorMsg = e->ErrorMessage();
        AfxMessageBox(e->ErrorMessage());
    }

    return TRUE;
}

那个_hr是总是返回E_FAIL,然后return的时候就崩溃掉。
这几天在写一个对数据库操作的项目,但是这几天被这个问题给卡住了,实在是找不到如何解决了,还请各位大神指点迷津。图片说明

  • 写回答

3条回答 默认 最新

  • oyljerry 2015-07-21 10:45
    关注

    主要是你的数据库连接字符串,有两种类型,你选择你对应的

     //设置连接字符串
     //一个是数据库身份验证
    _bstr_t strConnect = "Provider=SQLOLEDB.1;Data Source=ZHOUWEI\\MYSQL;Initial Catalog=AMS;User ID=sa;PWD=123456";
    
     //下面是Windows身份验证方式
    _bstr_t strConnect = "Provider=SQLOLEDB.1;Integrated Security = SSPI;Persist Security Info = FALSE;Data Source=WANGLIANG\\SQLEXPRESS;Initial Catalog=ADODemo"; 
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥50 汇编语言除法溢出问题
  • ¥65 C++实现删除N个数据列表共有的元素
  • ¥15 Visual Studio问题
  • ¥15 state显示变量是字符串形式,但是仍然红色,无法引用,并显示类型不匹配
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗