0
//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();
4

2 に答える 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 に答える