我用catch,再用AfxMessageBox显示了错误,为:IDispatch error #3127代码:_bstr_t ConnStr="Provider=SQLOLEDB.1;User ID=sa;Password=0000;Security Info=False;Initial Catalog=train;Data Source=(local)";_bstr_t RsStr="select * from LOGIN where USER_PSWD='00000'"; _RecordsetPtr Rs= NULL;
_ConnectionPtr Conn= NULL;
try
{
Conn.CreateInstance(__uuidof(Connection));
Conn->Open(ConnStr,"","",adConnectUnspecified);
if (Conn->State==adStateOpen)
{
MessageBox("Conn is ok");
}
Rs.CreateInstance(__uuidof(Recordset));
Rs->Open(RsStr, (IDispatch*)Conn,adOpenDynamic,adLockOptimistic,adCmdText);
if (Rs->State == adStateOpen)
{
MessageBox("Rs is ok");
}
}
catch(_com_error &e)
{
AfxMessageBox(e.ErrorMessage());
}
请问大家是哪里出错了?怎样纠正?谢谢
_ConnectionPtr Conn= NULL;
try
{
Conn.CreateInstance(__uuidof(Connection));
Conn->Open(ConnStr,"","",adConnectUnspecified);
if (Conn->State==adStateOpen)
{
MessageBox("Conn is ok");
}
Rs.CreateInstance(__uuidof(Recordset));
Rs->Open(RsStr, (IDispatch*)Conn,adOpenDynamic,adLockOptimistic,adCmdText);
if (Rs->State == adStateOpen)
{
MessageBox("Rs is ok");
}
}
catch(_com_error &e)
{
AfxMessageBox(e.ErrorMessage());
}
请问大家是哪里出错了?怎样纠正?谢谢
中把Provider=SQLOLEDB.1;改为Provider=sqloledb;strConnect = _T("Provider=sqloledb;Data Source=MyServerName;"
"Initial Catalog=MyDatabaseName;"
"User Id=MyUsername;Password=MyPassword;");
就是这行出错的
sql语句错了,你把它拿到数据库中去执行一下
Conn,true),adOpenStatic,adLockReadOnly,adCmdTable);但还是不行,在OPEN的时候出错,错误是IDispatch error #3092
adLockOptimistic,
adCmdText);
试试!
//出错处理:
3127——没有找到目标表
3092——目标表已经存在你查看一下你的目标表的状况!
另外:
直接这样给_bstr_t 赋值好象也不太好,容易内存泄露??
_bstr_t ConnStr="Provider=SQLOLEDB.1;User ID=sa;Password=0000;Security Info=False;Initial Catalog=train;Data Source=(local)";
sql = TEXT("select * from.....");
Rs->Open((_variant_t)sql,_variant_t((IDispatch *)
Conn,true),adOpenStatic,adLockReadOnly,adCmdText);百分之百可以通过!
楼主你再试一试了
ADO出错时的提示信息:IDispatch error #xxxx 在什么地方(MSDN?书籍?杂志?)可以找到?
谢谢!to 楼主:不好意思,借光一下:)
hr=m_pConnection.CreateInstance(__uuidof(Connection));
if(SUCCEEDED(hr)&& m_pConnection!=NULL)