调用DLL时出错,是什么原因呢。附代码
这是有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;
}
问题点数:100、回复次数:12Top
1 楼mybcb(bcb)回复于 2004-12-03 00:20:19 得分 0
怎么没有人回答啊。Top
2 楼fengforever(http://index.cnblogs.com)回复于 2004-12-03 08:06:14 得分 20
不懂呀,帮你顶一下Top
3 楼mybcb(bcb)回复于 2004-12-03 09:20:50 得分 0
UPTop
4 楼houlinghouling(秋水伊)回复于 2004-12-03 09:53:55 得分 10
你的写法有点奇怪,换一下试试,然后用断点跟踪看一看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 ="用户密码正确";
}
Top
5 楼Jacob105(长风)回复于 2004-12-03 12:00:50 得分 10
upTop
6 楼wangyingbobj2911(不帅)回复于 2004-12-03 17:56:35 得分 10
最后再upTop
7 楼rickjelly2004(每逢佳节倍思亲-------------快乐生活)回复于 2004-12-03 18:05:14 得分 0
靠,你靠INSERT出错来判断呀
你就不能用SELECT拉呀Top
8 楼hdt(倦怠)回复于 2004-12-03 18:24:27 得分 50
发生什么错误Top
9 楼hdt(倦怠)回复于 2004-12-03 18:30:10 得分 0
CoUninitialize在哪?Top
10 楼hdt(倦怠)回复于 2004-12-03 18:30:50 得分 0
使用com做好使用
try{}catch()
Top
11 楼hdt(倦怠)回复于 2004-12-03 18:39:29 得分 0
try {
..
}
catch( _com_error err) {
}
看看错误Top
12 楼mybcb(bcb)回复于 2004-12-04 15:55:16 得分 0
谢谢各位,我自己搞定了。
Top




