以前の開発者コードを変更していて、更新ステートメントでパラメーターを使用していないことがわかりました。インジェクションに対してより安全にするためにパラメーターを使用して変更しましたが、今ではまったく更新されません。古いコードで更新されました。コードは問題なく実行されます。エラーは発生しませんが、テーブルは更新されません。値が次のように表示されている場合
csharpa="Hello"
csharpb="Text"
csharpc="1"
デバッグ中。テーブルのチェック
select * from table where sqlb="Text" and sqlc="1"
まだ以前の値を持っています
sqla="Goodbye"
期待どおりに Hello に更新されませんでした。
前のコード:
string q = "update table set sqla='" +
csharpa + "' where sqlb='" + csharpb +
"' and sqlc=" + (string)HttpContext.Current.Session["csharpc"];
SqlConnection conn = new SqlConnection(connstr);
SqlCommand sda = new SqlCommand(q, conn);
conn.Open();
sda.ExecuteNonQuery();
conn.Close();
後のコード:
string q = "update table set sqla='@para' where sqlb='@parb' and sqlc=@parc";
SqlConnection conn = new SqlConnection(connstr);
SqlCommand sda = new SqlCommand(q, conn);
sda.Parameters.AddWithValue("@para", csharpa);
sda.Parameters.AddWithValue("@parb", csharpb);
sda.Parameters.AddWithValue("@parc", (string)HttpContext.Current.Session["csharpc"]);