System.Data.SqlClient.SqlException: 'Неверный синтаксис рядом с' `'.' - PullRequest
0 голосов
/ 23 февраля 2019

Я пытаюсь создать поле входа в систему, используя ASP.NET, который будет принимать данные из полей текстового поля и сравнивать их с таблицей «user» в моей базе данных.Столбцы User ID и Password.Но ошибка

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

появляется при использовании формы входа в систему.Я не вижу никаких проблем с синтаксисом ...

Я новичок в этом, поэтому извините, если ошибка очевидна!

public partial class Login_Page : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        lblErrorMessage.Visible = false;
        SqlConnection con = new SqlConnection("Data Source=JACKS-PC\\SQLEXPRESS;Initial Catalog=CBR;Integrated Security=True");
        con.Open();
    }

    protected void btnLogin_Click(object sender, EventArgs e)
    { 
            SqlConnection con = new SqlConnection();
            con.ConnectionString = "Data Source=JACKS-PC\\SQLEXPRESS;Initial Catalog=CBR;Integrated Security=True";
            con.Open();

            string userid = txtUsername.Text.Trim();
            string password = txtPassword.Text.Trim();

            SqlCommand cmd = new SqlCommand("select `user id`,`password` from user where `user id`='" + txtUsername.Text + "'and `password`='" + txtPassword.Text + "'", con);

            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();

            da.Fill(dt);

            if (dt.Rows.Count > 0)
            {
                Session["username"] = txtUsername.Text.Trim();
                Response.Redirect("Homepage.aspx");
            }
            else
            {
                lblErrorMessage.Visible = true;
            }

            con.Close();
    }
}

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

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

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

     ....
}
всегда распоряжайтесь объектами, когда заканчиваете работу с ними.Для этого используйте using(SqlConnection conn = new SqlConnection()).
  • все методы, которые реализуют IDisposable, могут использоваться в операторе using
0 голосов
/ 23 февраля 2019
  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]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...