vc通过ADO方式访问mysql数据库奔溃,急求答案,如果想要钱的,请免开尊口
梨花带血 2015-06-23 01:31:33 ADO.CPP文件:
#include "stdafx.h"
#include "sql.h"
#include "ADO.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CADO::CADO()
{
OnInitADOConn();
}
CADO::~CADO()
{
CloseConn();
}
void CADO::OnInitADOConn()
{
CoInitialize(NULL); //初始化Com组件
m_pConnection.CreateInstance("ADODB.Connection"); //Connection用于与数据库服务器的链接
_bstr_t conStr=_T("Driver={MySQL ODBC 5.1 Driver};SERVER=localhost;UID=root;PWD=123456;DATABASE=lszb;PORT=3306");
/******************连接数据库********************/
try
{
m_pConnection->ConnectionTimeout = 5;
m_pConnection->Open(conStr,_T(""),_T(""),adModeUnknown);
}
catch(_com_error e) //捕捉异常
{
AfxMessageBox(e.ErrorMessage());
}
CoUninitialize();
}
BOOL CADO::RunSQL(CString sql)//执行函数
{
if (m_pConnection==NULL)
{
OnInitADOConn();
}
try
{
m_pConnection->Execute((_bstr_t)sql,NULL,adCmdText);
}
catch(_com_error e)
{
MessageBox(NULL,e.ErrorMessage(),"执行非查询过程",MB_OK);
return FALSE;
}
return TRUE;
}
_RecordsetPtr& CADO::Search(CString sql)
{
HRESULT hr;
ASSERT(!sql.IsEmpty()); //SQL语句不能
if (m_pConnection==NULL)
{
OnInitADOConn();
}
try
{
hr=m_pRecordset.CreateInstance(__uuidof(Recordset));//创建记录集对象实例
if(SUCCEEDED(hr))
{
m_pRecordset->Open(_bstr_t (sql),m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adModeUnknown); //执行SQL得到记录集
}
}
catch(_com_error e) //捕获可能的异常
{
MessageBox(NULL,e.ErrorMessage(),"执行查询过程",MB_OK);
}
return m_pRecordset;
}
void CADO::CloseConn()
{
m_pConnection->Close();
CoUninitialize();
}
void CADO::CloseRecordset()
{
if(m_pRecordset->GetState() == adStateOpen) //判断当前的记录集状态
m_pRecordset->Close(); //关闭记录集
}
调用函数如下:
void CSqlDlg::OnButton2()
{
// TODO: Add your control notification handler code here
int n=0;
CString sql;
CString str="1021";
sql.Format("select * from huoweiinfo where huowei = '%s'",str);
m_Ado.Search(sql);
if (!(m_Ado.m_pRecordset->State & adStateOpen))
{
AfxMessageBox((_T("记录集未打开。")));
return;
}
while (!m_Ado.m_pRecordset->adoEOF)
{
_variant_t varValue;
CString strHuoWei = _T("");
CString HuoLiang = _T("");
CString WuLiaodaima = _T("");
CString RuKutime = _T("");
varValue = m_Ado.m_pRecordset->GetCollect(_variant_t(_T("huowei")));
if (varValue.vt != VT_NULL)
{
strHuoWei = varValue.bstrVal;
}
else
{
strHuoWei = _T("");
}
varValue = m_Ado.m_pRecordset->GetCollect(_variant_t(_T("full")));
if (varValue.vt != VT_NULL)
{
HuoLiang = varValue.bstrVal;
}
else
{
HuoLiang = _T("");
}
varValue = m_Ado.m_pRecordset->GetCollect(_variant_t(_T("matecode")));
if (varValue.vt != VT_NULL)
{
WuLiaodaima = varValue.bstrVal;
}
else
{
WuLiaodaima = _T("");
}
varValue = m_Ado.m_pRecordset->GetCollect(_variant_t(_T("intime")));
if (varValue.vt != VT_NULL)
{
RuKutime = varValue.bstrVal;
}
else
{
RuKutime = _T("");
}
//刷新ListCtrl
CString strText = _T("");
CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST1);
strText.Format(_T("%d"), n + 1);
pListCtrl->InsertItem(n, strText);
strText.Format(_T("%s"), strHuoWei);
pListCtrl->SetItemText(n, 1, strText);
strText.Format(_T("%s"), HuoLiang);
pListCtrl->SetItemText(n, 2, strText);
strText.Format(_T("%s"), WuLiaodaima);
pListCtrl->SetItemText(n, 3, strText);
strText.Format(_T("%s"), RuKutime);
pListCtrl->SetItemText(n, 4, strText);
n++;
m_Ado.m_pRecordset->MoveNext();
}
}
问题描述:执行到红色语句时,报错:First-chance exception in sql.exe (MYODBC5.DLL): 0xC0000005: Access Violation.
堆栈最后显示信息如下:
MYODBC5! 5c468346()
MYODBC5! 5c463953()
MYODBC5! 5c4cdf36()
MYODBC5! 5c4d0007()
MYODBC5! 5c4db5ae()
MYODBC5! 5c4652ab()
MYODBC5! 5c4656b2()
MYODBC5! 5c465946()
ODBC32! 6924bf84()
MSDASQL! 60b15f8e()
MSDASQL! 60b19f4a()
MSDASQL! 60af6648()
MSDASQL! 60afc80a()
MSADRH15! 639428ee()
MSADO15! 6348d200()
MSADO15! 6348621d()
MSADO15! 6348051a()
MSADO15! 6348041a()
MSADO15! 63486d69()
MSADO15! 63486cea()
Recordset15::GetadoEOF() line 634 + 18 bytes
CSqlDlg::OnButton2() line 210 + 18 bytes
请各位大师指点一下,实在搞不定了,想要钱的请免开尊口,在下承受不起,送你一句话:学海无涯,谁能说已登彼岸。把事情别整的那么下作