这是有asp.net的代码,我调用VC写的DLL,出现调用外部组件出错的现象,当我输入的密码正确时就出现错误,当用户名不正确或者密码不正确时,就不会出现这个错误了。请问是什么原因呢。                          
int i=0;
i=CheckLogin(User.Text,PassWord.Text );
if(-2==i)
{
this.Label3.Text ="发生来未知错误";
}
else if(-1==i)
{
this.Label3.Text ="用户帐号不存在";
}
else if(0==i)
{
this.Label3.Text ="用户密码不正确";
}
else if(1==i)
{
this.Label3.Text ="用户密码正确";
}
下面是在VC写的DLL代码
int CCheckLogin::CheckLogin(CString UserID,CString PassWord)
{
if (UserID=="")
{
return -1;
}
if(PassWord.GetLength()!=8)
{
return 0;
}
::CoInitialize(NULL);
     HRESULT hr;
int i = 0;
_bstr_t ConnectionString="Provider=SQLOLEDB;SERVER=localhost;DATABASE=abc;UID=sa;PWD=1";//数据库连接串
_bstr_t _user="sa";
_bstr_t _password="1";
_ConnectionPtr pconn;
_RecordsetPtr prs;
_CommandPtr pcmd;
hr = pconn.CreateInstance(__uuidof(Connection));
_bstr_t txtSQL ;
CString tempPass;
pconn->Open(ConnectionString,_user,_password,0);

hr = prs.CreateInstance(__uuidof(Recordset));
prs->putref_ActiveConnection(pconn);
//prs->put_CacheSize(5000); 
//prs->PutLockType(adLockReadOnly);
//prs->PutCursorType(adOpenStatic);
//prs->CursorLocation = adUseClient;
pcmd.CreateInstance(__uuidof(Command));
pcmd->putref_ActiveConnection(pconn);
pcmd->put_CommandType(adCmdText);
txtSQL=_bstr_t("select * from t_user where Fuserid='" + (_bstr_t)UserID + "'"); pcmd->put_CommandText(txtSQL); prs->Open((IDispatch *) pcmd,vtMissing,adOpenForwardOnly,adLockReadOnly,adCmdText);
if (prs->adoEOF)
{
prs->Close(); pconn->Close();

return -1;
}
else
{
tempPass=prs->GetCollect("FPass");

}
if(tempPass!=PassWord)
{
return 0;
}

txtSQL="insert into t_LoginMessage(FUserID,FDate,Fzt) values('" + (_bstr_t)UserID + "',getdate(),1)"; pconn->BeginTrans();
try
{

pconn->Execute(txtSQL,NULL,1); pconn->CommitTrans();
}
catch(_com_error er)
{
pconn->RollbackTrans();
return -2;
}

prs->Close();

pconn->Close();

return 1;
}

解决方案 »

  1.   

    你的写法有点奇怪,换一下试试,然后用断点跟踪看一看i具体得到的是多少
    int i=0;
    i=CheckLogin(User.Text,PassWord.Text );
    if(i==-2)
    {
    this.Label3.Text ="发生来未知错误";
    }
    else if(i==-1)
    {
    this.Label3.Text ="用户帐号不存在";
    }
    else if(i==0)
    {
    this.Label3.Text ="用户密码不正确";
    }
    else if(i==1)
    {
    this.Label3.Text ="用户密码正确";
    }
      

  2.   

    靠,你靠INSERT出错来判断呀你就不能用SELECT拉呀
      

  3.   

    使用com做好使用
    try{}catch()
      

  4.   

    try {
    ..
    }
    catch( _com_error err) {
    }
     看看错误