尝试在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是T-SQL上的 保留关键字 。您应该将其与方括号一起使用[User]
User
[User]
同样,使用 参数化查询始终是一个好习惯。
并且 永远不要以纯文本格式存储密码! 使用SHA-512。