这是有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;
}
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;
}
解决方案 »
- 新手,一个单独文件(本地)下载页面download.aspx,下载后是download.aspx
- 下面的这段反汇编代码是什么意思
- 关于引用Microsoft.Office.Interop.Owc11的问题
- 问两个关于DataList的问题
- 关于dataset
- VS2005,在项目里添加了ASPNETDB.MDF数据库用来存储用户登陆信息,在安装程序时,可不可以在ASPNETDB.MDF中预制一个管理员帐号?
- 为什么要将asp.net的web程序在iis中创建为应用程序才能访问,否则就报错?
- 我装的2003,用不了ASP.NET
- 如何清除?
- excel导入数据库代码问题
- WINFORM下的COOKIE问题,不解决一直在线等!200分!
- 用仅有的20分提个问,请高手帮我解决这个查找控件的问题
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 ="用户密码正确";
}
try{}catch()
..
}
catch( _com_error err) {
}
看看错误