Hello everyone,
I'm not sure if this is actually .NET specific or just a
problem with the
underlying COM / ADO code, but it seems to only happen under
interop.
Scenario:
1. We have an ASP.NET system that is using COM Interop. The
COM library has
a Login method which attempts to authenticate the user
against a database
table. Normally this works fine.
2. However, once in a while, the eof condition gets
triggerred in the
offending code below. This should not be getting triggered
because the
strUserName value that is passed in IS in the database.
We have verified that it is not a database problem because
we have an
exception handler in the .NET code which attempts to execute
the identical
SQL statement except that it uses Enterprise Library to do
so. It finds the
user just fine.
What is odd about this is that there is not a failure of the
m_objAdo.Open
statement. Rather, it simply appears that the result-set is
coming back empty.
Could there be some kind of strange memory problem or
connection pool
problem that would result in this kind of behavior. I would
expect there to
be an explicit error rather than an empty result set.
Any ideas much appreciated.
Thank you,
Josh
Offending code:
strSql.Format( _T("SELECT TOP 1 * FROM %s WHERE %s = %s
OR %s = %s ORDER BY
Len(%s) DESC"),
_mt(TABLE_USERS),
FIELD_EMAILADDRESS, (LPCTSTR)
SqlString(strUserName),
FIELD_REALEMAILADDRESS, (LPCTSTR)
SqlString(strUserName),
FIELD_REALEMAILADDRESS );
}
ComThrowOle( m_objAdo.Connect( pAS ) );
ComThrowOle( m_objAdo.Open( strSql, adOpenKeyset,
adLockOptimistic ) );
if ( m_objAdo.eof() )
{
m_objAdo.Close();
m_objAdo.Disconnect();
// Could not find the User Name or Email in the
database
strErr.Format(
CResString(IDS_ERR_USERNAMENOTFOUND), strUserName );
}
===================================
This list is hosted by DevelopMentorŪ http://www.develop.com
View archives and manage your subscription(s) at http://discuss.develop.com
|