如何从下拉列表中选择值并从单击按钮时从数据库中删除

时间:2016-12-06 09:39:27

标签: c# asp.net

function doStuff(obj){
    openObj(obj);
}

function myMethod(val)
{
    alert(val);
}

C#

<asp:DropDownList ID="DropDownList3" runat="server" 
         DataTextField="number" DataValueField="number"
         AutoPostBack="True"
         DataSourceID="SqlDataSource1">
    </asp:DropDownList>
<asp:Button ID="Button1" runat="server" Text="delete" OnClick="Button1_Click" />

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:Bank databaseConnectionString %>" SelectCommand="SELECT [number] FROM [Account]"></asp:SqlDataSource>

4 个答案:

答案 0 :(得分:0)

我认为你的Button点击代码是错误的,这将是一个回发所以它应该是(并且@nad提到你还需要执行实际的命令)

if (Page.IsPostBack)
{
    SqlConnection conn = new SqlConnection("Data Source=FATIMAH;Initial Catalog=Bank database;Integrated Security=True");
    String sql;
    sql = "delete FROM Account where number ='" + DropDownList3.SelectedValue +"'";
    SqlCommand comm = new SqlCommand(sql, conn);
    comm.ExecuteNonQuery() 
    conn.Close();
}

https://msdn.microsoft.com/en-us/library/system.web.ui.page.ispostback(v=vs.110).aspx

答案 1 :(得分:0)

史蒂夫提到你需要使用comm.ExecuteNonQuery()并需要打开连接

using (var conn = new SqlConnection("Data Source=FATIMAH;Initial Catalog=Bank database;Integrated Security=True"))
            {
                conn.Open();
                var sql = "delete FROM Account where number ='" + DropDownList3.SelectedValue + "'";
                using (var comm = new SqlCommand(sql, conn))
                {
                    comm.ExecuteNonQuery();
                }
                conn.Close();
            }

答案 2 :(得分:0)

您需要调用ExecuteNonQuery方法来实际删除记录。

protected void Button1_Click(object sender, EventArgs e)
{

    if (!Page.IsPostBack)
    {
    SqlConnection conn = new SqlConnection("Data Source=FATIMAH;Initial Catalog=Bank database;Integrated Security=True");
    String sql;
    sql = "delete FROM Account where number ='" + DropDownList3.SelectedValue +"'";
    SqlCommand comm = new SqlCommand(sql, conn);
    comm.ExecuteNonQuery() 
    conn.Close();
    }

}

答案 3 :(得分:0)

代码有一些问题。

首先,Button1_Click事件可能只会在Post Post上被触发,但if语句仅在不是回发时才会运行。我完全失去了这个条件,但你可以简单地删除!(不是)。

其次,您实际上从未打开连接或在创建命令后执行命令。它需要调用conn.Open和其中一个comm.Execute ...方法来实际执行任何操作。

此外,还有一个可能的安全性(SQL注入)问题,即将值连接到查询中。正确的方法是将变量作为参数传递给命令。它可能会阻止你的系统有一天成为头条新闻的主题。

最后有可能发生连接泄漏,因为conn变量未在using语句中分配,并且conn.Close()调用不在finally块中。 comm变量也应该被处理掉。

请改为尝试:

    protected void Button1_Click(object sender, EventArgs e)
    {
        using (SqlConnection conn = new SqlConnection("Data Source=FATIMAH;Initial Catalog=Bank database;Integrated Security=True"))
        {
            conn.Open();
            string sql = "delete Account where number = @number";
            using (SqlCommand comm = new SqlCommand(sql, conn))
            {
                comm.Parameters.AddWithValue("@number", DropDownList3.SelectedValue);
                comm.ExecuteNonQuery();
            }
        }
    }