在连接数据库和vc时运行结果出现 error:关闭对象时,不允许操作 求各位大神指教!!
连接数据库的代码如下,ODBC数据源配置已成功。#import"c:\ProgramFiles\CommonFiles\System\ADO\msado15.dll"\n...
连接数据库的代码如下,ODBC数据源配置已成功。
#import"c:\Program Files\Common Files\System\ADO\msado15.dll"\ no_namespace rename("EOF","EndOfFile")#include<iostream>#include<iomanip>using namespace std;int main(){ STU studt; ::CoInitialize(NULL); _ConnectionPtr m_pConnection("ADODB.Connection"); _RecordsetPtr m_pRecordset("ADODB.Recordset"); _bstr_t bstrSQL("select * from StudentInfo"); char * UseDB="USE VcSqlAdoDB"; char *query_cmd="DELETE FROM StudentInfo WHERE sname='HappyTuple' "; char Yn; _bstr_t strConnect="DSN=VCSQLSever2005;Provider=MSDASQL.1;\ Sever=.;Database=VcSqlAdoDB;uid=sa;pwd=123;"; m_pConnection->Open(strConnect,"","",adModeUnknown); try { m_pConnection.CreateInstance("ADODB.Connection"); if(m_pConnection==NULL) cerr<<"Link data Error!\n"; m_pConnection->Execute(UseDB,NULL,1); m_pRecordset.CreateInstance(__uuidof(Recordset)); m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText); _variant_t vsno,vsname,vssex,vsage,vcoll;(部分功能函数省略) } catch(_com_error e) { cerr<<"\n error:"<<(char*)e.Description(); } if(m_pConnection->State) m_pConnection->Close(); ::CoUninitialize(); return 0;} 展开
#import"c:\Program Files\Common Files\System\ADO\msado15.dll"\ no_namespace rename("EOF","EndOfFile")#include<iostream>#include<iomanip>using namespace std;int main(){ STU studt; ::CoInitialize(NULL); _ConnectionPtr m_pConnection("ADODB.Connection"); _RecordsetPtr m_pRecordset("ADODB.Recordset"); _bstr_t bstrSQL("select * from StudentInfo"); char * UseDB="USE VcSqlAdoDB"; char *query_cmd="DELETE FROM StudentInfo WHERE sname='HappyTuple' "; char Yn; _bstr_t strConnect="DSN=VCSQLSever2005;Provider=MSDASQL.1;\ Sever=.;Database=VcSqlAdoDB;uid=sa;pwd=123;"; m_pConnection->Open(strConnect,"","",adModeUnknown); try { m_pConnection.CreateInstance("ADODB.Connection"); if(m_pConnection==NULL) cerr<<"Link data Error!\n"; m_pConnection->Execute(UseDB,NULL,1); m_pRecordset.CreateInstance(__uuidof(Recordset)); m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText); _variant_t vsno,vsname,vssex,vsage,vcoll;(部分功能函数省略) } catch(_com_error e) { cerr<<"\n error:"<<(char*)e.Description(); } if(m_pConnection->State) m_pConnection->Close(); ::CoUninitialize(); return 0;} 展开
2个回答
展开全部
//前面省略
int main()
{
//前面定义省略
_bstr_t strConnect="DSN=VCSQLSever2005;Provider=MSDASQL.1;\ Sever=.;Database=VcSqlAdoDB;uid=sa;pwd=123;";
//------------------------------开始改错----------------------------------
m_pConnection.CreateInstance("ADODB.Connection");
/态信判/建立之后才能Open,否则Try 的时候帆改,错误,直接退出。
//打开失败,直接关闭,自然提示关闭错误。
m_pConnection->Open(strConnect,"","",adModeUnknown);
try
{
//m_pConnection.CreateInstance("ADODB.Connection");
//--这句位置错误! 要上调到Open 之前。
//-------------------------改错结束----------------------------------
//后面省略
}
catch(_com_error e)
{
cerr<<"\n error:"<<(char*)e.Description();
}
//if(m_pConnection->State) m_pConnection->Close();
//事实中,我发现这句要这么写才能达到效果
if (m_pConnection!=NULL)
{
if(m_pConnection->State) m_pConnection->Close();
}
::CoUninitialize();
return 0;
}
//另外,多说一句,既然你用ADO 连接了数据库,就不要再用DNS了,配置那个东西好烦。
//用户不会的,ADO可以直接连接坦竖SQL的。
BSTR text;
m_pConnection.CreateInstance(__uuidof(Connection));
str.Format("Provider=SQLOLEDB.1;Persist Security Info=false;User ID=%s;PassWord=%s;Server=%s;Database=%s",
sql_id,sql_pwd,sql_ip,sql_database);
text= str.AllocSysString();
try
{
m_pConnection->Open(text,"","",adModeUnknown);
}
catch(_com_error e)
{
//AfxMessageBox("数据库连接失败,\n请检查数据库IP是否配置错误!");
}
::SysFreeString(text);
int main()
{
//前面定义省略
_bstr_t strConnect="DSN=VCSQLSever2005;Provider=MSDASQL.1;\ Sever=.;Database=VcSqlAdoDB;uid=sa;pwd=123;";
//------------------------------开始改错----------------------------------
m_pConnection.CreateInstance("ADODB.Connection");
/态信判/建立之后才能Open,否则Try 的时候帆改,错误,直接退出。
//打开失败,直接关闭,自然提示关闭错误。
m_pConnection->Open(strConnect,"","",adModeUnknown);
try
{
//m_pConnection.CreateInstance("ADODB.Connection");
//--这句位置错误! 要上调到Open 之前。
//-------------------------改错结束----------------------------------
//后面省略
}
catch(_com_error e)
{
cerr<<"\n error:"<<(char*)e.Description();
}
//if(m_pConnection->State) m_pConnection->Close();
//事实中,我发现这句要这么写才能达到效果
if (m_pConnection!=NULL)
{
if(m_pConnection->State) m_pConnection->Close();
}
::CoUninitialize();
return 0;
}
//另外,多说一句,既然你用ADO 连接了数据库,就不要再用DNS了,配置那个东西好烦。
//用户不会的,ADO可以直接连接坦竖SQL的。
BSTR text;
m_pConnection.CreateInstance(__uuidof(Connection));
str.Format("Provider=SQLOLEDB.1;Persist Security Info=false;User ID=%s;PassWord=%s;Server=%s;Database=%s",
sql_id,sql_pwd,sql_ip,sql_database);
text= str.AllocSysString();
try
{
m_pConnection->Open(text,"","",adModeUnknown);
}
catch(_com_error e)
{
//AfxMessageBox("数据库连接失败,\n请检查数据库IP是否配置错误!");
}
::SysFreeString(text);
大雅新科技有限公司
2024-11-19 广告
2024-11-19 广告
这方面更多更全面的信息其实可以找下大雅新。深圳市大雅新科技有限公司从事KVM延长器,DVI延长器,USB延长器,键盘鼠标延长器,双绞线视频传输器,VGA视频双绞线传输器,VGA延长器,VGA视频延长器,DVI KVM 切换器等,优质供应商,...
点击进入详情页
本回答由大雅新科技有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询