System.Data.SqlClient.SqlException: 'Неверный синтаксис рядом с' `'.'

вы можете использовать mssql_get_last_message () для mssql errors

2
задан Olivier Jacot-Descombes 23 February 2019 в 16:10
поделиться

2 ответа

  1. Просто удалите символы `` ', чтобы заставить его работать.

  2. Ваш код уязвим для инъекции, попробуйте добавить значения с помощью метода SqlCommand.Parameters.Add().

Используйте этот код:

SqlCommand cmd = new SqlCommand("select userid, password from user where user id = @id and password = @password", con);

cmd.Parameters.Add("@id", SqlDbType.VarChar).Value = txtUsername.Text;
cmd.Parameters.Add("@password", SqlDbType.VarChar).Value = txtPassword.Text;

И, как упоминалось @marc_s, user id не является допустимым именем столбца, оно должно быть похоже на userid или если в нем есть пробел, должно быть как: [user id]

0
ответ дан Ashkan Mobayen Khiabani 23 February 2019 в 16:10
поделиться

Есть много проблем с вашим кодом:

  1. Не храните простой текстовый пароль в вашей программе или конфигурации приложения.
  2. Не вставляйте строку подключения в вашу программу.
  3. ` не является синтаксисом SQL Server.
  4. никогда не используйте конкатенацию строк в своих запросах, особенно если исходят от пользователей. Используйте параметризованные запросы.

.

using (SqlCommand cmd = new SqlCommand("select 1 from tbl where id=@id", conn))
{
     var idParameter = new SqlParameter()
     idParameter.ParameterName = "@id";
     idParameter.Value         = 1234; 
     cmd.Parameters.Add(idParameter);

     ....
}
  1. всегда располагайте объекты, когда вы заканчиваете работу с ними. Для этого применения using(SqlConnection conn = new SqlConnection()).
    • все методы, которые реализуют IDisposable, могут использоваться в операторе using
0
ответ дан Derviş Kayımbaşıoğlu 23 February 2019 в 16:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: