表名附近的C#语法错误

时间:2013-12-12 12:19:35

标签: c# sql database select

我在尝试检查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附近有语法错误。我想知道为什么会这样。

提前致谢。

3 个答案:

答案 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)

问题:您提供的表格名称UserTransact-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);