如何删除数据库中的数据 table
How to delete a data in database table
我有这个从用户 @ID, @From, @To, @Title, @Message
那里获取这些信息的表格。然后将它们插入数据库 table.
如何使用@ID
删除特定数据?用户将拥有一个包含所有 datatable
的 dataGridView1
,然后通过获取 CurrentCell
它将删除此特定数据。
private void delet_button_Click(object sender, EventArgs e)
{
int i = dataGridView1.CurrentCell.RowIndex;
string strid = dataGridView1[0, i].Value.ToString();
//MessageBox.Show(strid);
int id = Convert.ToInt32(strid);
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "Delete * from MessagesTable where [ID]=@ID ";
cmd.Parameters.AddWithValue("@ID", id);
MessageBox.Show("Message was deleted");
BindGrid();
}
添加cmd.ExecuteNonQuery();
private void delet_button_Click(object sender, EventArgs e)
{
int i = dataGridView1.CurrentCell.RowIndex;
string strid = dataGridView1[0, i].Value.ToString();
//MessageBox.Show(strid);
int id = Convert.ToInt32(strid);
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "Delete from MessagesTable where [ID]=@ID ";
cmd.Parameters.AddWithValue("@ID", id);
cmd.ExecuteNonQuery();
MessageBox.Show("Message was deleted");
BindGrid();
}
你几乎可以肯定这一切都是错误的。你应该从 DataTable
开始。如果合适,您可以通过在数据适配器上调用 Fill
来查询数据库以填充它。然后,您可以通过 BindingSource
将 table 绑定到您的 DataGridView
,您可以将其添加到设计器中,例如
var table = new DataTable();
using (var adapter = new SqlDataAdapter("SQL query here", "connection string here"))
{
adapter.Fill(table);
}
BindingSource1.DataSource = table;
DataGridView1.DataSource = BindingSource1;
然后通过在 BindingSource
上调用 RemoveCurrent
将当前行标记为已删除。这将隐藏网格中的行,但不会影响该阶段的数据库。要将更改保存到数据库,您可以在适当配置的数据适配器上调用 Update
,这可能与您最初调用 Fill
的适配器相同。您可以在用户删除行后立即调用 Update
来保存更改,或者您可以只在本地缓存所有更改 - 插入、更新和删除 - 然后在最后调用 Update
一次以保存所有一起改变。
我有这个从用户 @ID, @From, @To, @Title, @Message
那里获取这些信息的表格。然后将它们插入数据库 table.
如何使用@ID
删除特定数据?用户将拥有一个包含所有 datatable
的 dataGridView1
,然后通过获取 CurrentCell
它将删除此特定数据。
private void delet_button_Click(object sender, EventArgs e)
{
int i = dataGridView1.CurrentCell.RowIndex;
string strid = dataGridView1[0, i].Value.ToString();
//MessageBox.Show(strid);
int id = Convert.ToInt32(strid);
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "Delete * from MessagesTable where [ID]=@ID ";
cmd.Parameters.AddWithValue("@ID", id);
MessageBox.Show("Message was deleted");
BindGrid();
}
添加cmd.ExecuteNonQuery();
private void delet_button_Click(object sender, EventArgs e)
{
int i = dataGridView1.CurrentCell.RowIndex;
string strid = dataGridView1[0, i].Value.ToString();
//MessageBox.Show(strid);
int id = Convert.ToInt32(strid);
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "Delete from MessagesTable where [ID]=@ID ";
cmd.Parameters.AddWithValue("@ID", id);
cmd.ExecuteNonQuery();
MessageBox.Show("Message was deleted");
BindGrid();
}
你几乎可以肯定这一切都是错误的。你应该从 DataTable
开始。如果合适,您可以通过在数据适配器上调用 Fill
来查询数据库以填充它。然后,您可以通过 BindingSource
将 table 绑定到您的 DataGridView
,您可以将其添加到设计器中,例如
var table = new DataTable();
using (var adapter = new SqlDataAdapter("SQL query here", "connection string here"))
{
adapter.Fill(table);
}
BindingSource1.DataSource = table;
DataGridView1.DataSource = BindingSource1;
然后通过在 BindingSource
上调用 RemoveCurrent
将当前行标记为已删除。这将隐藏网格中的行,但不会影响该阶段的数据库。要将更改保存到数据库,您可以在适当配置的数据适配器上调用 Update
,这可能与您最初调用 Fill
的适配器相同。您可以在用户删除行后立即调用 Update
来保存更改,或者您可以只在本地缓存所有更改 - 插入、更新和删除 - 然后在最后调用 Update
一次以保存所有一起改变。