我在尝试检查C#中的3层项目的登录凭据时遇到了一些问题。
目前,我有一个名为User的表,其中包含userName和password列。
在我的BusinessLogicLayer中,我获取用户输入并将它们传递给dataAccessLayer:
public string checkCredential(string userName, string password)
{
string returnMessage = "";
User user = new User(userName, password);
Boolean success = user.checkCredential();
if (!success)
{
returnMessage += "Username and password does not match!";
}
else
{
returnMessage = "";
}
return returnMessage;
}
在我的数据访问层中,我有一种检查登录信用的方法:
public Boolean checkCredential()
{
Boolean result = false;
using (var connection = new SqlConnection(FFTHDb.connectionString)) // get your connection string from the other class here
{
SqlCommand command = new SqlCommand("SELECT userName, password FROM User WHERE userName = '" + userName + "' AND password = '" + password + "'", connection);
connection.Open();
using (var dr = command.ExecuteReader())
{
if (dr.Read())
{
result = true;
}
}
}
return result;
}
我有一个单独的类来设置连接字符串:
public static string connectionString = DataAccessLayer.Properties.Settings.Default.DBConnStr;
public static SqlDataReader executeReader(string query)
{
SqlDataReader result = null;
System.Diagnostics.Debug.WriteLine("FFTHDb executeReader: " + query);
SqlConnection connection = new SqlConnection(connectionString);
SqlCommand command = new SqlCommand(query, connection);
connection.Open();
result = command.ExecuteReader();
connection.Close();
return result;
}
没有编译错误。我仔细检查了数据库中的表名和列。但是,它只是告诉我User附近有语法错误。我想知道为什么会这样。
提前致谢。
答案 0 :(得分:4)
User
是T-SQL上的reserved keyword。您应该使用方括号,如[User]
同时使用 parameterized queries 也是一种很好的做法。
绝不以纯文本格式存储密码!使用SHA-512 hash。
答案 1 :(得分:0)
用户是保留关键字,因此您需要在其周围添加方括号。有关列表,请参阅here。 所以,你应该这样做
SELECT userName, password FROM [User] WHERE userName =
答案 2 :(得分:-2)
问题:您提供的表格名称User
是Transact-SQL
中的关键字。
Reserved Words
解决方案:将保留字User
括在方括号[]
中。
解决方案1:
SqlCommand command = new SqlCommand("SELECT userName, password FROM [User] WHERE userName = '" + userName + "' AND password = '" + password + "'", connection);
解决方案2:
SqlCommand command = new SqlCommand("SELECT userName, password FROM [User] WHERE userName= @username AND password = @password", connection);
command.Parameters.AddWithValue("@username",userName);
command.Parameters.AddWithValue("@password",password);