下面我声明一个巫婆类型的函数是'int'。我为sql查询声明了这个函数,它将int作为输出。在这里,我必须返回一些东西。但是我无法理解我在'int'类型函数中返回的内容。
public int Login(LoginClass loginClassObj)
{
string connectionString = @"Data Source=localhost;Initial Catalog=LoginTest;Integrated Security=True";
SqlConnection connection = new SqlConnection(connectionString);
connection.Open();
string query = @"SELECT COUNT(log_in) FROM login_table WHERE username = '"+loginClassObj.Username+"' AND password = '"+loginClassObj.Password+"'";
SqlCommand command = new SqlCommand(query,connection);
command.ExecuteNonQuery();
return ???;
}
答案 0 :(得分:8)
嗯,您有查询...但出于某种原因,您正在调用ExecuteNonQuery
。您应该指定ExecuteScalar
以获取单个值。然后,您可以将结果转换为int
:
return (int) command.ExecuteScalar();
我认为重点是返回匹配用户的数量,虽然这有点奇怪。
此外:
using
语句,以便正确处理SqlCommand.Parameters
的文档。int
开始。也许您应该声明它返回bool
而不是?方法声明是给你的吗?您应该始终了解参数和返回类型的含义 - 否则您无法正确实现该方法。答案 1 :(得分:2)
这样的事情应该起作用并解决大多数问题:
public bool Login(LoginClass loginClassObj)
{
string connectionString = ...
using(SqlConnection connection = new SqlConnection(connectionString))
using(SqlCommand command = connection.CreateCommand())
{
connection.Open();
command.CommandText = @"SELECT COUNT(log_in) FROM login_table
WHERE username = @username AND hash = @hash";
command.Parameters.AddWithValue("username", loginClassObj.Username);
command.Parameters.AddWithValue("hash", loginClassObj.GetSecureHash());
int count = Convert.ToInt32(command.ExecuteScalar());
return count == 1;
}
}
但是,在许多情况下,您可能需要在用户名上进行初始查询以找到salt - 可能是同时检索哈希值,然后使用salt执行安全哈希,并比较本地计算哈希到存储的哈希。