Member 13512434 Ответов: 2

Выберите параметризует запрос


Как бы я изменил это в параметризованный запрос? Это код для входа пользователей в систему

private void LoginButton_Click(object sender, EventArgs e)
        {

            SqlConnection sqlcon = new SqlConnection(@"Data Source=HP\SQLEXPRESS;Initial Catalog=Inventory;Integrated Security=True");
            string query = "Select * from Employees Where Username = '" + Username_txt.Text + "' and Password = '" + Password_txt.Text + "'";
            SqlDataAdapter sda = new SqlDataAdapter(query, sqlcon);
            DataTable dtbl = new DataTable();
            sda.Fill(dtbl);

            if (dtbl.Rows.Count == 1)
            {
                Dashboard mainForm = new Dashboard();
                this.Hide();
                mainForm.Show();
            }
            else
            {
                LoginError.Visible = true;
            }
        }


Что я уже пробовал:

Переписываю код, но он все равно не работает

2 Ответов

Рейтинг:
1

OriginalGriff

an0ther прав насчет параметризации, но есть еще одна проблема: никогда не храните пароли в обычном тексте: Хранение паролей: как это сделать.[^]


Richard Deeming

Некоторые люди никогда не слушают!
https://www.codeproject.com/Answers/1214540/Oledbexception-was-unhandled-Csharp-explanation-ne[^]

Тем не менее, по крайней мере, ОП, похоже, наконец-то получил сообщение о SQLi. :)

Рейтинг:
0

an0ther1

Поместите заполнитель в запрос для каждого параметра;

string query = "SELECT * FROM Employees WHERE Username = @username AND Password = @password";

Затем добавьте параметры в текст запроса следующим образом;
// declare a datatable outside of your using statement
DataTable dtResults;
using(SqlConnection conn = new SqlConnection(@"Data Source=HP\SQLEXPRESS;Initial Catalog=Inventory;Integrated Security=True"))
{
    // create a SQL Command object    
    SqlCommand cmd = new SqlCommand(conn, query);
    // populate the parameters using either of the following methods
    cmd.Parameters.Add("@username", SqlDbType.Varchar);
    cmd.Parameters["@username"].Value = Username_txt.Text;
    cmd.Parameters.AddWithValue("@password", Password_txt.Text);
    // open the connection - should we wrapped in a try/catch block
    conn.Open();
    // create an adapter and fill the datatable with results
    SqlDataAdapter adap = new SqlDataAdapter(cmd);
    adap.Fill(dtResults);
}


MSDN является отличным источником справочных материалов, ниже приведена ссылка на SqlCommand.Параметры, свойства, которые могут пригодиться;Свойство sqlcommand.Параметров Собственность (Системы.Данных.Поставщики sqlclient)[^]

с уважением