синтаксическая ошибка в предложении from C # и Access

#c# #sql #database

#c# #sql #База данных

Вопрос:

Я продолжаю получать эту ошибку во время выполнения, syntax error in from clause . Я уже пробовал использовать свой sql-запрос в access, и, похоже, все в порядке.

Вот мой код, и я использую C # windows form с текстовым полем и кнопкой

             OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:UsersMisry27DocumentsVisual Studio 2010ProjectsInventoryInventorybinDebugInventory.mdb");
            OleDbCommand cmd = new OleDbCommand("select * from Employee where username = '"   this.tbUsername.Text   "' and password = '"   this.tbPassword.Text   "';", conn);
            OleDbDataReader dr;
            conn.Open();
            dr = cmd.ExecuteReader();

            int count = 0;
            while (dr.Read())
            {
                count = count   1;
            }
            if (count == 1)
            {
                MessageBox.Show("Username or Password is correct");
            }
            else
            {
                MessageBox.Show("Username or Password Incorrect");
            }
            conn.Close();
  

Комментарии:

1. У вас уязвимость при внедрении SQL.

2. Вы всегда должны использовать параметризованные запросы . Такого рода конкатенации строк открыты для атак с использованием SQL-инъекций .

3. Не храните пароли в виде обычного текста .

4. И добавление всего остального. ПАРОЛЬ — это зарезервированное ключевое слово в MS-Access. При использовании из NET вам нужно заключить это в квадратные скобки

5. В первой строке, которая у вас есть new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4); , в конце нет "

Ответ №1:

Как объяснено в комментариях выше, ПАРОЛЬ является зарезервированным ключевым словом и должен быть заключен в квадратные скобки при использовании в запросе, выполняемом из net.

Далее следует обычный совет. Используйте параметризованный запрос, чтобы избежать проблем с синтаксическим анализом и sql-инъекций, используйте инструкцию using для ваших одноразовых объектов.

 using(OleDbConnection conn = new OleDbConnection(a correct connection string here))
using(OleDbCommand cmd = new OleDbCommand(@"select * from Employee 
                                            where username = ? AND [Password] = ?", conn);
{

    conn.Open();
    cmd.Parameters.AddWithValue("@p1", this.tbUsername.Text);
    cmd.Parameters.AddWithValue("@p2", this.tbPassword.Text);
    using(OleDbDataReader dr = cmd.ExecuteReader())
    {
       .....
    }
}