public class UserLoginInfo
{
public UserRole Role;
public string Username;
public static UserLoginInfo FetchUser(string username, string password)
{
using (var connection = Utils.Database.GetConnection())
using (var command = new SqlCommand("SELECT [Username], [Password], [Role] FROM [Users] WHERE [Username] = @username", connection))
{
command.Parameters.AddWithValue("@username", username);
using (var reader = command.ExecuteReader())
{
if (reader == null || !reader.Read() || !Utils.Hash.CheckPassword(username, password, (byte[])reader["Password"]))
throw new Exception("Wrong username or password.");
return new UserLoginInfo { Username = (string)reader["Username"], Role = (UserRole)reader["Role"] };
}
}
}
}
当我设置断点并调试时,错误来自这一行。
return
new UserLoginInfo
{
Username = (string)reader["Username"],
Role = (UserRole)reader["Role"]
};
我不明白为什么会出现这个错误,请帮帮我!
编辑:如何将(字符串)reader["Role"]转换为UserRole?
public enum UserRole
{
Admin,
Maintance,
User
}
Role
和Username
成员是公共的?你至少应该使用public UserRole Role { get; set; }
将它们转换为自动属性。 - Daniel Pryden