想用ADO封装一个操作数据的类,编译能过,运行显示“0xC0000005:Access Violation”解决方案
想用ADO封装一个操作数据的类,编译能过,运行显示“0xC0000005:Access Violation”
自己定义的类的头文件:
class AdoAccess
{
AdoAccess();
~AdoAccess();
public:
int nResultRow;
int nResultCol;
CString pData;
bool OpenDataBase(CString DsnName,CString sUserID,CString sPassword);
int Select(CString Sql); //执行SQL查询语句,结果放在数组pData中
int Excute(CString Sql); //执行无返回值得SQL语句
bool CloseDataBase(); //关闭数据库连接
private:
_ConnectionPtr m_pConnection; //定义连接指针
_RecordsetPtr m_pRecordset;
};
**********************************************************
执行到此处就出弹出对话框,程序中止。
bool
AdoAccess::OpenDataBase(CString DsnName,CString sUserID,CString sPassword)
{
// m_pConnection.CreateInstance(__uuidof(Connection));
// pConnection-> Open(strCnn, " ", " ",adConnectUnspecified);
try
{
//就是这一句,奇怪。
HRESULT hr=m_pConnection.CreateInstance( "ADODB.Connection ");//创建连接对象
hr=m_pConnection-> Open((_bstr_t)DsnName,(_bstr_t)sUserID,(_bstr_t)sPassword,adOpenUnspecified); //连接数据库
return true;
}
catch(_com_error e)
{
CString errormessage;
errormessage.Format( "连接数据库失败!/r/n错误信息:%s ",e.ErrorMessage());
//AfxMessageBox(errormessage);///显示错误信息
return false;
}
}
**************************************
这是主程序对它的调用:
#include "stdafx.h "
#include "AdoAccess.h "
int main(int argc, char* argv[])
{
CString sql = "select * from test; ";
CString DNSname = "shpdb ";
CString User = "sa ";
CString Passwords = "sa ";
AdoAccess *Adodata = NULL;
Adodata-> OpenDataBase(DNSname,User,Passwords);
Adodata-> Select(sql);
return 0;
}
***********************************
CoInitialize(NULL);初始化COM环境我在类的构造函数里加了。
想不出来是什么地方出了问题,m_pConnection在构造函数里设为NULL了,不设也一样出此问题。问题的全部消息是“Unhandled exception in DataAccess.exe:0xC0000005:Access Violation”
请高手赐教!
------解决方案--------------------
AdoAccess *Adodata = NULL;
Adodata-> OpenDataBase(DNSname,User,Passwords);《=====你没有new AdoAccess 对象就使用指针了
------解决方案--------------------
差个public:
自己定义的类的头文件:
class AdoAccess
{
AdoAccess();
~AdoAccess();
public:
int nResultRow;
int nResultCol;
CString pData;
bool OpenDataBase(CString DsnName,CString sUserID,CString sPassword);
int Select(CString Sql); //执行SQL查询语句,结果放在数组pData中
int Excute(CString Sql); //执行无返回值得SQL语句
bool CloseDataBase(); //关闭数据库连接
private:
_ConnectionPtr m_pConnection; //定义连接指针
_RecordsetPtr m_pRecordset;
};
**********************************************************
执行到此处就出弹出对话框,程序中止。
bool
AdoAccess::OpenDataBase(CString DsnName,CString sUserID,CString sPassword)
{
// m_pConnection.CreateInstance(__uuidof(Connection));
// pConnection-> Open(strCnn, " ", " ",adConnectUnspecified);
try
{
//就是这一句,奇怪。
HRESULT hr=m_pConnection.CreateInstance( "ADODB.Connection ");//创建连接对象
hr=m_pConnection-> Open((_bstr_t)DsnName,(_bstr_t)sUserID,(_bstr_t)sPassword,adOpenUnspecified); //连接数据库
return true;
}
catch(_com_error e)
{
CString errormessage;
errormessage.Format( "连接数据库失败!/r/n错误信息:%s ",e.ErrorMessage());
//AfxMessageBox(errormessage);///显示错误信息
return false;
}
}
**************************************
这是主程序对它的调用:
#include "stdafx.h "
#include "AdoAccess.h "
int main(int argc, char* argv[])
{
CString sql = "select * from test; ";
CString DNSname = "shpdb ";
CString User = "sa ";
CString Passwords = "sa ";
AdoAccess *Adodata = NULL;
Adodata-> OpenDataBase(DNSname,User,Passwords);
Adodata-> Select(sql);
return 0;
}
***********************************
CoInitialize(NULL);初始化COM环境我在类的构造函数里加了。
想不出来是什么地方出了问题,m_pConnection在构造函数里设为NULL了,不设也一样出此问题。问题的全部消息是“Unhandled exception in DataAccess.exe:0xC0000005:Access Violation”
请高手赐教!
------解决方案--------------------
AdoAccess *Adodata = NULL;
Adodata-> OpenDataBase(DNSname,User,Passwords);《=====你没有new AdoAccess 对象就使用指针了
------解决方案--------------------
差个public: