2016-06-30 6 views
0

Я пытаюсь обновить таблицу доступа с кодом, указанным ниже. однако обновление не выполняется. Это не дает мне никаких ошибок, но не обновляет базу данных. Какие-либо предложения?C# Access Db update query not working

string Const = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\\Db\\test.accdb";  

OleDbCommand Cmd; 
OleDbConnection con22 = new OleDbConnection(Const); 
con22.Open(); 

string sql = "UPDATE CostT SET tFormSent='" + Selection1.Text + "',TName='" + UserName.Text + "',FormDate='" + FormDate.Text + "',where ReqNum=" + ReqNum.Text; 

cmd = new OleDbCommand(sql, con22); 
cmd.ExecuteNonQuery(); 
con22.Close(); 

MessageBox.Show("Form has been Updated"); 
+0

Он * должен * бросать ошибку, так как есть по крайней мере одна ошибка синтаксиса. Несмотря на все эти уязвимости SQL-инъекций, неизвестно, какой случайный код вы могли бы выполнять в своей базе данных. Каково фактическое значение времени выполнения запроса, который вы выполняете? – David

ответ

2

Попробуйте изменить запрос,
к

string sql = "UPDATE CostT SET tFormSent = @selection1,TName = @UserName,FormDate = @FormDate where ReqNum = @ReqNum"; 
cmd = new OleDbCommand(sql, con22); 
cmd.Parameters.Add("@selection1", Selection1.Text); 
cmd.Parameters.Add("@UserName", UserName.Text); 
cmd.Parameters.Add("@FromDate", FromDate.Text); 
cmd.Parameters.Add("@ReqNum", ReqNum.Text); 
cmd.ExecuteNonQuery(); 
con22.Close(); 
+0

Это прекрасно! Я думаю, что инъекции SQL я все испортил. Но версия параметров отлично работала. Теперь мне просто нужно изучить Unions и Delete. Спасибо!! –

+0

приветствую :) – NikhilSN

3

Ваш запрос содержит синтаксическую ошибку: у вас есть запятая перед вашей статьи WHERE, что не принадлежит там.

Но, что более важно: Ваш код открыт для SQL injection! Пожалуйста, не вставляйте пользовательский ввод непосредственно в свой запрос, но вместо этого используйте параметризованные запросы!