2016-06-30 5 views
0

アクセステーブルを下記のコードで更新しようとしています。ただし、更新は実行されません。それは私にエラーを与えることはありませんが、データベースを更新しません。助言がありますか?C#アクセスDb更新クエリが機能しない

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インジェクションがすべてを混乱させたと思う。しかし、パラメータのバージョンは完全に機能しました。今、私は組合と削除を学ばなければなりません。ありがとうございました!! –

+0

あなたは歓迎です:) – NikhilSN

3

クエリに構文エラーがあります:あなたには属していないWHERE句の前にコンマがあります。

さらに重要:あなたのコードはSQL injectionに公開されています!クエリに直接ユーザー入力を挿入するのではなく、パラメータ化されたクエリを使用してください。少なくとも一つの構文エラーがありますので、

関連する問題