#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())
{
.....
}
}