CString m_dbName="TESTDB";
CString dataFiles="d:\\my_data.mdf";AfxOleInit();
SQLDMO::_SQLServer2Ptr spSQLServer;
spSQLServer.CreateInstance(__uuidof(SQLDMO::SQLServer2)));
spSQLServer->AttachDB(_bstr_t(m_dbName),_bstr_t(dataFiles));
执行上面这句 就出错提示:
“0x10217c5f”指令引用的0x00000000内存。该内存不能为read
然后应用程序关闭了。但是在企业管理器查看,数据库也正确附加上去了的,请问是什么原因呢?

解决方案 »

  1.   

    得先判断 CreateInstance的返回值,看看创建是否成功了
      

  2.   

    还有就是_bstr_t是宽字节的,而你的CString dataFiles="d:\\my_data.mdf";等都是多字节的,这个得改一下
      

  3.   

    判断 CreateInstance的返回值,看看创建是否成功
      

  4.   

    谢谢围观,是这个方法本身好像有问题。
    要用Raw_attachDb这个方法,自己控制第三个参数。
      

  5.   

    _bstr_t(const char* s) throw(_com_error);
    _bstr_t(const wchar_t* s) throw(_com_error);
    有这2个构造函数,
    spSQLServer->AttachDB(_bstr_t(m_dbName),_bstr_t(dataFiles));
    应该没什么问题吧?