在连接数据库和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;} 展开
展开全部
//前面省略
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);
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询