这是我第一次来这里,如果我错过发布或其他任何规则,请耐心等待。 我正在寻找使用C#从数据库中删除行的正确方法。我已经编写了代码来从datagridview中删除它但是我还要添加什么才能将它从数据库中删除?
以下是目前的代码:
foreach (DataGridViewRow row in dataGridView1.SelectedRows)
{
if (!row.IsNewRow)
{
dataGridView1.Rows.Remove(row);
}
MessageBox.Show("Selected rows Deleted");
}
这是我最初尝试过的,通过搜索来思考:
OpenConnection();
string productType = txtDeleteProduct.Text;
MainForm frm = new MainForm();
mySqlDataAdapter = new MySqlDataAdapter("DELETE * from products WHERE ProductType= '@productType';", connection);
DataSet DS = new DataSet();
mySqlDataAdapter.Fill(DS);
dataGridView1.DataSource = DS.Tables[0];
CloseConnection();
答案 0 :(得分:0)
这是你的第二个样本的改编:
using (var cn = new MySqlDbConnection("your connection string here"))
using (var cmd = new MySqlDbCommand("DELETE * from products WHERE ProductType= @productType;")) // Note that I removed the single quotes (')
{
//Use the actual column type and length here.
// Ignore examples elsewhere online that use AddWithValue(). This is better!
cmd.Parameters.Add("@productType", MySqlDbType.VarString, 25).Value = txtDeleteProduct.Text;
cn.Open();
cmd.ExecuteNonQuery();
}
我的问题中没有足够的信息让我完全完成此操作。您需要类似的东西,但需要在SQL语句中使用实际的表名和关键字段。这是一个更接近的东西:
using (var cn = new MySqlDbConnection("your connection string here"))
using (var cmd = new MySqlDbCommand("DELETE * from `MYTABLE` WHERE MyIDColumn = @rowKey;")) // Note that I removed the single quotes (')
{
cmd.Parameters.Add("@rowKey", MySqlDbType.Int32);
cn.Open();
foreach (DataGridViewRow row in dataGridView1.SelectedRows)
{
if (!row.IsNewRow)
{
//not sure which cell(s) in the grid make up your primary key
cmd.Parameters["@rowKey"].Value = Convert.ToInt32(row.Cells[0]);
cmd.ExecuteNonQuery();
dataGridView1.Rows.Remove(row);
}
}
}
MessageBox.Show("Selected rows Deleted");
最后......这里的正常程序实际上是发送删除命令,然后重新绑定网格......从头开始重新加载所有内容。你这样做是因为你已经有了加载网格的代码,所以它为你节省了一些编码工作,并且因为它可以让你有机会在同时更新表中的其他内容时更新。