0

ドロップダウンリスト ( id="myDDL") があります。

updateTable_byDDLSQL テーブルを更新するためのメソッド ( ) がありSET="bla"ます。..

しかし、に書き込むとSET= '"+ myDDL.Text.ToString() + "'、SQL の列が空に更新されます。

ドロップダウンリストは、(クラス内の)外部に配置した配列からpage_loadバインドされており、ページの読み込み時にバインドしています。

    myDDL.DataSource = array;
    myDDL.DataBind();

aspx ページでは、ドロップダウン リストの配列値をよく確認できますが、必要な項目を選択してボタンをクリックすると、列が空になります。

どこが間違っていますか?

4

2 に答える 2

2

page_load で DDL をバインドすると、ページが読み込まれるたびにバインドされます。したがって、コードを簡単に推測すると、if ステートメントを追加して、page.isPostback かどうかを確認するだけです。

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        ddlDemo.DataSource = new string[] { "asdf", "jklö" };
        ddlDemo.DataBind();
    }
}

protected void btnDemo_Click(object sender, EventArgs e)
{
    Debug.WriteLine(ddlDemo.Text);
    SqlConnection con = null;
    using (con = new SqlConnection("YOUR CON STRING"))
    {
        SqlCommand com = new SqlCommand( "update tblXYZ set ABC = @A", con);
        SqlParameter param = new SqlParameter("A", System.Data.SqlDbType.YOURTYPE);
        param.Value = ddlDemo.Text;
        com.Parameters.Add(param);
        con.Open();
        int affectedRows = com.ExecuteNonQuery();
        Debug.WriteLine(affectedRows + " affected!");
        con.Close();
    }
}

このaspxページ内

<body>
  <form id="form1" runat="server">

    <asp:DropDownList ID="ddlDemo" runat="server">
    </asp:DropDownList>
    <asp:Button ID="btnDemo" runat="server" Text="Button" onclick="btnDemo_Click" />
  </form>
</body>

とにかく、ユーザー入力を使用してデータベース レコードを更新/挿入/削除する前に、常にユーザー入力を確認する必要があります。

于 2012-08-20T19:48:04.797 に答える
1
  1. あなたが取る必要がありますmyDDL.SelectedItem.Text
  2. パラメータを使用して SQL インジェクションを回避する必要があります

見てみな:

   YourUpdateCommand.CommandText = "UPDATE table SET column = @NewValue WHERE conditions";

   YourUpdateCommand.Parameters.Add("@NewValue", System.Data.SqlDbType.VarChar, 100); //or whatever

   YourUpdateCommand.Parameters["@NewValue"].Value = myDDL.SelectedItem.Text;

   YourUpdateCommand.ExecuteNonQuery();
于 2012-08-20T19:44:55.027 に答える