0

我有下拉列表(id="myDDL")。

我有updateTable_byDDL更新我的 sql 表的方法 (),当我将手动值放入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 回答