none
sqlserver2008调用Recordset15::Open函数报错 RRS feed

  • 问题

  • 请教如下问题:

    运行环境:win10(64位),VS2010,sqlserver2008

    在如上的环境下使用ado连接数据库,数据库放在本机,能够用_ConnectionPtr 对象连接成功,但是在用_RecordsetPtr 指针调用Open函数打开数据集的时候报错。调用语句如下:

     if(NULL != m_pConnection)
     {
      m_pRecordset.CreateInstance(__uuidof(Recordset));
      m_pRecordset->Open("SELECT * FROM tb_emp",m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
      return m_pRecordset;
     }

    调用堆栈如下

    > SQLtest.exe!Recordset15::Open(const _variant_t & Source, const _variant_t & ActiveConnection, CursorTypeEnum CursorType, LockTypeEnum LockType, long Options)  行 2310 C++
      SQLtest.exe!CDBAdosql::GetRecordSet(_bstr_t bstrSQL)  行 61 + 0x56 字节 C++
      SQLtest.exe!CSQLtestDlg::OnInitDialog()  行 141 + 0x3c 字节 C++
      mfc100ud.dll!AfxDlgProc(HWND__ * hWnd, unsigned int message, unsigned int __formal, unsigned int __formal)  行 28 + 0x10 字节 C++

    报错如下

    SQLtest.exe 中的 0x746496c2 处有未经处理的异常: Microsoft C++ 异常: 内存位置 0x00f8e9ec 处的 _com_error。

    请各位前辈帮小弟诊断诊断,是在哪个环节出错?感激不尽。

    2016年10月23日 15:51

全部回复

  • Hi ahke,

    感谢在MSDN论坛发帖。

    建议你首先使用以下代码获取错误详细信息。这样可以方便查找具体原因。

    catch (_com_error &e) {
          printf("Error:\n");
          printf("Code = %08lx\n", e.Error());
          printf("Code meaning = %s\n", (char*) e.ErrorMessage());
          printf("Source = %s\n", (char*) e.Source());
          printf("Description = %s\n", (char*) e.Description());
       }

    这里有一些文档,你可以参考使用。

    https://msdn.microsoft.com/en-us/library/ms675544(v=vs.85).aspx

    https://msdn.microsoft.com/en-us/library/ms675103(v=vs.85).aspx

    希望可以帮助到你。

    Best Regards,
    Sera Yu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2016年10月25日 7:40