SQL Server выберите выполнение запроса из c#

string user = "1234";
string strSQL = string.Format("Select * From User where UserId = '{0}'",user);
SqlCommand myCommand = new SqlCommand(strSQL, cnn);
reader = myCommand.ExecuteReader();

мой User таблица состоит из UserId и Password столбцы. The UserId тип столбца nchar и поэтому я использовал одинарные кавычки. Я получаю сообщение об ошибке

неверный синтаксис рядом с ключевым словом User"

(Я думаю, имя таблицы User идет речь).

у меня есть строка подключения и другие вещи, связанные с средой базы данных, правильно, потому что я проверил базу данных состояние соединения и оно открыто(во время выполнения программы).

в чем ошибка синтаксиса? Я не могу получить строки из моей таблицы.

4 ответов


User - Ключевое слово. Используйте квадратные скобки вокруг него, чтобы избежать ошибки. Select * from [User]

string strSQL = string.Format("Select * From [User] where UserId = '{0}'",user);

кроме того, вы всегда должны использовать параметризованный запрос, как показано ниже, чтобы предотвратить атаку SQL-инъекций:

string strSQL = string.Format("Select * From [User] where UserId = @UserId");

вы действительно должны использовать параметры для этого:

string user = "1234";

using (SqlCommand command = new SqlCommand("select * from [User] where UserId = @userid", cnn))
{
    command.Parameters.AddWithValue("@userid", user);

    using (SqlDataReader reader = myCommand.ExecuteReader())
    {
        // iterate your results here
    }
}

хорошо замеченный другими плакатами, Я никогда не ловил зарезервированное слово с вашим именем таблицы. Я исправил свой ответ - но не могу взять на себя ответственность за то, что пропустил очевидное!


обертывание []. Это ключевое слово. Читать Reserved Keywords статья из MSDN.

string strSQL = string.Format("Select * From [User] where UserId = '{0}'",user);

но более важная часть, Ваш запрос открыт для SQL Injection атака. Всегда следует использовать параметризованные запросы.

string strSQL = "Select * From [User] where UserId = @userID";
SqlCommand myCommand = new SqlCommand(strSQL, cnn);
myCommand.Parameters.AddWithValue("@userID", user);

вы должны обернуть user С скобки []

string strSQL = string.Format("Select * From [User] where UserId = '{0}'",user);

запрос выше уязвим для SQL Injection. Его следует параметризовать, чтобы избежать этого. Ниже приведен пример:

string user = "1234";
string strSQL = "Select * From [User] where UserId = @userID";
SqlCommand myCommand = new SqlCommand(strSQL, cnn);
myCommand.AddWithValue("@userID", user);
reader = myCommand.ExecuteReader();

использовать следующий

  • Try-Catch блок для правильного улавливания ошибок
  • using заявление о надлежащем удалении объекта

фрагмент:

string user = "1234";
string strSQL = "Select * From [User] where UserId = @userID";
using (SqlConnection cnn = new SqlConnection("connection string here"))
{
    using (SqlCommand myCommand = new SqlCommand(strSQL, cnn))
    {
        myCommand.Parameters.AddWithValue("@userID", user);
        using (SqlDataReader reader = myCommand.ExecuteReader())
        {
            while (reader.Read())
            {
                Console.WriteLine(reader["columnName"].ToString());
            }
        }
    }
}