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());
}
}
}
}