vc6.0操作sql server 2000数据库。那位高手熟悉_RecordsetPtr指针操作,帮小弟看看下面的代码吧,能够实现我要的向TwoConditionSet表中插入数据,但是结束后就出现 Runtime error!
this application has requested the runtime to terminate it in an unusual way.
please contact the application's support team for more information.
的错误。
是因为结束后没有对指针处理导致的吗??? 求指点!!!void Createtwice()
{ ADOConn ado;
int countnumber=0;
int circletime=0;
CString strsql="select * from OneConditionSet where oncehouse=1";
_bstr_t bstrsql(strsql); _variant_t varconditionstr1;
_variant_t varconditionstr2;
_variant_t varcondition1;
_variant_t varcondition2;
_variant_t varhouse;
_variant_t varhousespt; _RecordsetPtr m_pRecordset1=ado.GetRecordSet(bstrsql);
_RecordsetPtr m_pRecordset2; varconditionstr1=m_pRecordset1->GetCollect("oncecondit");
conditionstr1=(char *)_bstr_t(varconditionstr1); varcondition1=m_pRecordset1->GetCollect("onceeducat");
condition1=(char *)_bstr_t(varcondition1); while(!m_pRecordset1->adoBOF)
{
for(int j=0;j<circletime;j++)
m_pRecordset1->MoveNext();
if(circletime==0)
m_pRecordset1->MoveNext(); if(circletime!=0)
{
varconditionstr1=m_pRecordset1->GetCollect("oncecondit");
conditionstr1=(char *)_bstr_t(varconditionstr1); varcondition1=m_pRecordset1->GetCollect("onceeducat");
condition1=(char *)_bstr_t(varcondition1);
m_pRecordset1->MoveNext();
}
m_pRecordset2=m_pRecordset1; while(!m_pRecordset2->adoEOF)
{
varconditionstr2=m_pRecordset2->GetCollect("oncecondit");
conditionstr2=(char *)_bstr_t(varconditionstr2); varcondition2=m_pRecordset2->GetCollect("onceeducat");
condition2=(char *)_bstr_t(varcondition2); if(conditionstr1!=conditionstr2)
{
countnumber++;
CString string="insert into TwoConditionSet(twiceid,twiceconditstr1,twicecondit1,twiceconditstr2,twicecondit2,";
string+="twicecondit12spt,twicehouse,twicehousespt)values(%d,'%s','%s','%s','%s',%d,%d,%d)";
CString str;
str.Format(string,countnumber,conditionstr1,condition1,conditionstr2,condition2,conditionspt,house,housespt);
_bstr_t bstrsql1(str);
ado.ExecuteSQL(bstrsql1);
}
m_pRecordset2->MoveNext(); }
circletime++;
m_pRecordset1->MoveFirst();
}
}
this application has requested the runtime to terminate it in an unusual way.
please contact the application's support team for more information.
的错误。
是因为结束后没有对指针处理导致的吗??? 求指点!!!void Createtwice()
{ ADOConn ado;
int countnumber=0;
int circletime=0;
CString strsql="select * from OneConditionSet where oncehouse=1";
_bstr_t bstrsql(strsql); _variant_t varconditionstr1;
_variant_t varconditionstr2;
_variant_t varcondition1;
_variant_t varcondition2;
_variant_t varhouse;
_variant_t varhousespt; _RecordsetPtr m_pRecordset1=ado.GetRecordSet(bstrsql);
_RecordsetPtr m_pRecordset2; varconditionstr1=m_pRecordset1->GetCollect("oncecondit");
conditionstr1=(char *)_bstr_t(varconditionstr1); varcondition1=m_pRecordset1->GetCollect("onceeducat");
condition1=(char *)_bstr_t(varcondition1); while(!m_pRecordset1->adoBOF)
{
for(int j=0;j<circletime;j++)
m_pRecordset1->MoveNext();
if(circletime==0)
m_pRecordset1->MoveNext(); if(circletime!=0)
{
varconditionstr1=m_pRecordset1->GetCollect("oncecondit");
conditionstr1=(char *)_bstr_t(varconditionstr1); varcondition1=m_pRecordset1->GetCollect("onceeducat");
condition1=(char *)_bstr_t(varcondition1);
m_pRecordset1->MoveNext();
}
m_pRecordset2=m_pRecordset1; while(!m_pRecordset2->adoEOF)
{
varconditionstr2=m_pRecordset2->GetCollect("oncecondit");
conditionstr2=(char *)_bstr_t(varconditionstr2); varcondition2=m_pRecordset2->GetCollect("onceeducat");
condition2=(char *)_bstr_t(varcondition2); if(conditionstr1!=conditionstr2)
{
countnumber++;
CString string="insert into TwoConditionSet(twiceid,twiceconditstr1,twicecondit1,twiceconditstr2,twicecondit2,";
string+="twicecondit12spt,twicehouse,twicehousespt)values(%d,'%s','%s','%s','%s',%d,%d,%d)";
CString str;
str.Format(string,countnumber,conditionstr1,condition1,conditionstr2,condition2,conditionspt,house,housespt);
_bstr_t bstrsql1(str);
ado.ExecuteSQL(bstrsql1);
}
m_pRecordset2->MoveNext(); }
circletime++;
m_pRecordset1->MoveFirst();
}
}
#include "StdAfx.h"
#include "HouseSaleSystem.h"
#include "ADOConn.h"#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////ADOConn::ADOConn()
{}ADOConn::~ADOConn()
{}// 初始化—连接数据库void ADOConn::OnInitADOConn(){ // 初始化OLE/COM库环境 ::CoInitialize(NULL); try {// 创建Connection对象 m_pConnection.CreateInstance("ADODB.Connection");// 设置连接字符串,必须是BSTR型或者_bstr_t类型 _bstr_t strConnect = "Provider=SQLOLEDB; Server=.;Database=mydata; uid=sa; pwd=;"; m_pConnection->Open(strConnect,"","",adModeUnknown); }// 捕捉异常 catch(_com_error e) {// 显示错误信息 AfxMessageBox(e.Description()); }}// 执行查询_RecordsetPtr& ADOConn::GetRecordSet(_bstr_t bstrSQL){ try {// 连接数据库,如果Connection对象为空,则重新连接数据库 if(m_pConnection==NULL) OnInitADOConn();// 创建记录集对象 m_pRecordset.CreateInstance(__uuidof(Recordset)); m_pRecordset->CursorLocation=adUseClient; //游标的位置出现.不加这句会出现The rowset is not //bookable运行错误// 取得表中的记录 m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText); }// 捕捉异常 catch(_com_error e) {// 显示错误信息 AfxMessageBox(e.Description()); }// 返回记录集 return m_pRecordset;}// 执行SQL语句,Insert Update _variant_tBOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL){// _variant_t RecordsAffected; try {// 是否已经连接数据库 if(m_pConnection == NULL) OnInitADOConn();// Connection对象的Execute方法:(_bstr_t CommandText,// VARIANT * RecordsAffected, long Options )// 其中CommandText是命令字串,通常是SQL命令。// 参数RecordsAffected是操作完成后所影响的行数,// 参数Options表示CommandText的类型:adCmdText-文本命令;adCmdTable-表名// adCmdProc-存储过程;adCmdUnknown-未知 m_pConnection->Execute(bstrSQL,NULL,adCmdText); return true; } catch(_com_error e) { AfxMessageBox(e.Description()); return false; }}
int ADOConn::GetRecordSetCount(_RecordsetPtr m_pRecordset)
{
int count=0;
try
{
m_pRecordset->MoveFirst();
}
catch(...)
{
return 0;
}
if(m_pRecordset->adoEOF)
return 0;
while(!m_pRecordset->adoEOF)
{
m_pRecordset->MoveNext();
count=count+1;
}
m_pRecordset->MoveFirst();
return count;
}
void ADOConn::ExitConnect(){// 关闭记录集和连接 if (m_pRecordset != NULL) m_pRecordset->Close(); m_pConnection->Close(); ::CoUninitialize();}