//the @Question column name needs to change according to the checkbox. For example Checkbox1 - Question1
SqlConnection con = new SqlConnection(...);
String sql = "UPDATE INQUIRY2 set @Question = @str WHERE email = @email AND base = @base;";
SqlCommand cmd = new SqlCommand(sql, con);
con.Open();
//checkbox2 - question 2
//if (CheckBox3.Checked == true)
//{
// str = str + CheckBox3 + 'x';
//}
DataTable theDataTable = null;
// Verify that dt is actually in session before trying to get it
if(Session["dt"] != null)
{
theDataTable = Session["dt"] as DataTable;
}
//Verify that the data table is not null
if(theDataTable != null)
{
email = theDataTable.Rows[0]["email"].ToString();
base1 = theDataTable.Rows[0]["base"].ToString();
}
//checkbox1 - question 1
if (CheckBox9.Checked == true)
{
str = str + CheckBox9.Text + 'x';
strQuestOne = theDataTable.Columns["Question1"].ToString();
}
cmd.Parameters.AddWithValue("@email", email);
cmd.Parameters.AddWithValue("@str", str);
cmd.Parameters.AddWithValue("@Question", strQuestOne);
cmd.Parameters.AddWithValue("@base", base1);
cmd.ExecuteNonQuery();
con.Close();
質問する
109 次
2 に答える
3
列名にパラメーターを使用しています。データベース オブジェクト (列名、テーブル、ストアド プロシージャ、またはその他のオブジェクト) をパラメーターとして渡すことはできません。パラメータにできるのは、列または変数の実際の値のみです。この場合、SQL ステートメントを動的に作成する必要があります。
String sql ="UPDATE INQUIRY2 set " + strQuestOne + "= @str WHERE email = ...
ただし、コードが SQL インジェクション攻撃の危険にさらされているため、注意が必要です。
于 2013-08-23T20:47:19.647 に答える
0
SQL は、文字列で @param タイプを使用します。
Web サイトでのほとんどの SQL インジェクション攻撃を無効にするために何らかのストアド プロシージャを実行しようとしている場合は、ストアド プロシージャを呼び出して、SqlCommand.Parameters コレクションに SqlCommand.Parameter を追加することを検討してください。
それ以外の場合は、SQL を実行するだけの場合は、実行する必要があります
string sql = String.Format("UPDATE TABLE set COLUMN = {0} where OTHERCOLUMN = {1}", varValue, varWhere);
于 2013-08-23T20:46:20.377 に答える