C# 例外情况 &引用;无效的列名';假';使用SqlConnection
我在语句中得到一个无效列名“False”的异常C# 例外情况 &引用;无效的列名';假';使用SqlConnection,c#,sql,asp.net,sql-server,ado.net,C#,Sql,Asp.net,Sql Server,Ado.net,我在语句中得到一个无效列名“False”的异常 reader = cmd.ExecuteReader(CommandBehavior.SingleRow); 我理解这可能与SQL的布尔类型是“位”有关,它不会将false转换为0。你如何缓解这种情况,或者这就是问题所在 public override bool ValidateUser(string username, string password) { bool isValid = false;
reader = cmd.ExecuteReader(CommandBehavior.SingleRow);
我理解这可能与SQL的布尔类型是“位”有关,它不会将false
转换为0
。你如何缓解这种情况,或者这就是问题所在
public override bool ValidateUser(string username, string password)
{
bool isValid = false;
SqlConnection conn = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand("SELECT Password, IsApproved FROM Users" +
" WHERE Email = @Email AND ApplicationName = @ApplicationName AND IsLockedOut = False", conn);
cmd.Parameters.Add("@Email", SqlDbType.NVarChar, 128).Value = username;
cmd.Parameters.Add("@ApplicationName", SqlDbType.NVarChar, 255).Value = m_ApplicationName;
SqlDataReader reader = null;
bool isApproved = true;
string pwd = "";
try
{
conn.Open();
reader = cmd.ExecuteReader(CommandBehavior.SingleRow);
if (reader.HasRows)
{
reader.Read();
pwd = reader.GetString(0);
isApproved = reader.GetBoolean(1);
}
else
{
return false;
}
reader.Close();
if (CheckPassword(password, pwd))
{
if (isApproved)
{
isValid = true;
SqlCommand updateCmd = new SqlCommand("UPDATE Users SET LastLoginDate = @LastLoginDate" +
" WHERE Email = @Email AND ApplicationName = @ApplicationName", conn);
updateCmd.Parameters.Add("@LastLoginDate", SqlDbType.DateTime).Value = DateTime.Now;
updateCmd.Parameters.Add("@Email", SqlDbType.NVarChar, 255).Value = username;
updateCmd.Parameters.Add("@ApplicationName", SqlDbType.NVarChar, 255).Value = m_ApplicationName;
updateCmd.ExecuteNonQuery();
}
}
else
{
conn.Close();
UpdateFailureCount(username, "password");
}
}
使用
IsLockedOut=0
检查false
IsLockedOut是一个具有位数据类型的字段,它存储0表示false,存储1表示true
所以在查询中也使用相同的方法/
如果IsLockedOut是varchar字段,那么在比较字符串比较时使用
IsLockedOut='False'
。就是这样做的。我学得很快!这是我第一次做任何编程。谢谢你的快速回复。