c#通过列表框删除数据库条目

c# deleting database entries through list box

我正在尝试通过列表框从 table 中删除行。下面是我用来将数据库中的数据显示到列表框中的代码。仅供参考 - 我正在使用日历搜索功能 - 用户 select 日历上的日期,单击 'search',列表框会根据在数据库中找到的日期显示适当的结果。

Con.Open():
SqlCommand cmd = new SqlCommand("Select Member, Clerk, Room, Time From Events where Date = @searchDate", con);
cmd.Parameters.AddWithValue("@searchDate",SearchDate.SelectedDate);
IDataReader reader = cmd.ExecuteReader();

            while (reader.Read()){               
                string member = (string)reader["Member"];
                string clerk= (string)reader["Clerk"];
                string room = (string)reader["Room"];
                string time = (string)reader["Time"];
                lstEvents.Items.Add("Member: " + member + " -- " + "Clerk: " + clerk+ " -- " + "Room: " + room + " -- " + "Time: " + time);        
                //lstEvents is the ID of the listbox              
            } 
            reader.Close();
con.Close();

上面的代码工作得很好。我所希望的是找到一种删除数据库中相应行的方法。因此,用户 select 是列表中返回的项目之一,并单击 'delete'。我达到了...

SqlCommand cmd = new SqlCommand("Delete From Events where Member, Clerk, Room, Date, Time = @member, @clerk, @room, @date, @time", con);
        cmd.Parameters.AddWithValue("@member", lstEvents.SelectedValue);
        cmd.Parameters.AddWithValue("@clerk", lstAppointments.SelectedValue);
        cmd.Parameters.AddWithValue("@room", lstEventss.SelectedValue);
        cmd.Parameters.AddWithValue("@date", Convert.ToDateTime(SearchDate.SelectedDate);
        cmd.Parameters.AddWithValue("@time", lstEvents.SelectedValue);

        cmd.Connection = con;
        cmd.ExecuteNonQuery(); 

这个尝试虽然有点牵强,但有什么建议可以做到吗?我不太明白如何 select 多个值,即列表框中同一行的成员和职员。

当您从数据库加载行时,同时加载主键(即使您不显示它)。

当您删除列表框中选定的内容时,您可以简单地使用主键删除。

如果您的 table 没有主键,您很有可能应该添加一个。

您最好的选择是使用数据绑定,您可以在此处创建具有 ID 的对象列表。最好的方法是创建一个新的 class 并赋予它数据库的属性:

public class MyClass
{
    public int Id {get; set;}
    public string Member {get; set;}
    public string Clerk {get; set;}
    public string Room {get; set;}
    public string Time {get; set;}
}

获得对象后,您可以"bind"将其添加到列表框控件

ASP.NET: Listbox datasource and databind

一旦你设法将你的列表对象绑定到你的 listboxitem 控件,你就可以在按钮事件中做一些这样的代码

MyClass selectedItem = (MyClass)yourcontrolname.SelectedItem;
// do stuff with selectedItem.Id (like delete an entry from the database