环境是:winxp系统,sqlserver个人版,VC6.0我用VC6通过ADO连接数据库ECS,在数据库里有个表userinfor,里面有三条记录
m_int是为了查看值,在对话框上的一个EditBox的绑定的int型变量在OnOK()里有以下代码:
_ConnectionPtr m_pConn;
_bstr_t strSQL;
_RecordsetPtr m_pRecordSet;
::CoInitialize(NULL); //初始化COM环境
m_pConn.CreateInstance(__uuidof(Connection)); //创建实例
m_pRecordSet.CreateInstance(__uuidof(Recordset)); try{
if (m_pConn->GetState() == adStateClosed)
{
m_pConn->ConnectionTimeout=30;
m_pConn->Open("driver={SQL SERVER};Server=127.0.0.1;DATABASE=ECS;UID=cz;PWD=cz","","",adModeUnknown);
}
}
catch (_com_error e)
{
AfxMessageBox(e.Description());
}
m_pRecordSet->Open("select * from userinfor", m_pConn.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);
m_int = m_pRecordSet->RecordCount;
UpdateData(FALSE);
if (m_pRecordSet->RecordCount >= 1)
{
CDialog::OnOK();
}
else
{
MessageBox("false");
} if (m_pConn->GetState() == adStateOpen) m_pConn->Close();
m_pConn.Release();
::CoUninitialize();这个程序应该没有错啊,看人家都是这么写的,但是m_pRecordSet->RecordCount的值是-1,不知道是怎么回事,“select * from userinfor”返回的数据集也不会是空啊!程序过程中没有报错的信息(郁闷!)只是在程序编译的时候出了一个warning:
msado15.tlh(405) : warning C4146: unary minus operator applied to unsigned type, result still unsigned
可是网上查到的说,不需要理会这个warning的啊!我以为是sqlserver的问题,跟踪了一下,发现程序已经连接上数据库,并发送了那个查询语句,就是程序收不到返回值。我用ADO控件 + DBGrid + ODBC连接,是有数据返回的。但我在程序中,使用ODBC数据源:
m_pConn->Open("DSN=MCS;Provider=MSDASQL","cz","cz",adConnectUnspecified);
结果还是m_pRecordSet->RecordCount=-1。都快疯了!哪位过路的好心人帮帮小弟吧!是不是我哪里漏了什么啊?