gpt4 book ai didi

c# - 数据没有从数据库中删除

转载 作者:太空宇宙 更新时间:2023-11-03 10:58:41 24 4
gpt4 key购买 nike

在 Windows 桌面应用程序窗体中,我使用此代码从 datagridview 和数据库中删除数据,我在 dataridview 中选择了一个复选框列,如果我单击 checkbox 行正在从那一刻删除datagridview,但不是来自数据库,因此当我重新加载表单时,我可以再次看到该行,我哪里出错了?

public partial class EditEngClgList : Form
{
private OleDbConnection acccon = null;
private OleDbDataAdapter da = null;
private DataTable dt = null;
private BindingSource bs = null;
private OleDbCommandBuilder cmdb = null;


public EditEngClgList()
{
InitializeComponent();
try
{
acccon = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db1.mdb");
acccon.Open();
}
catch (Exception err)
{
MessageBox.Show("Error:" + err);
}
string sql = "Select * From EngColeges order by EngClgID";
da = new OleDbDataAdapter(sql, acccon);
cmdb = new OleDbCommandBuilder(da);

dt = new DataTable();
da.Fill(dt);
bs = new BindingSource();
bs.DataSource = dt;

dataGridView1.DataSource = bs;

dataGridView1.Columns[1].Visible = false;
dataGridView1.Columns[2].HeaderText = "Engineering College Name";
dataGridView1.Columns[3].HeaderText = "Adress";
dataGridView1.Columns[4].HeaderText = "Entrance Type";
dataGridView1.Columns[2].Width = 400;
}

private void button4_Click(object sender, EventArgs e)
{
List<int> checkedclg = new List<int>();
DataRow dr;
List<int> checkedclgid = new List<int>();
for (int i = 0; i <= dataGridView1.RowCount - 1; i++)
{
if (Convert.ToBoolean(dataGridView1.Rows[i].Cells["Delete"].Value) == true)
{
checkedclg.Add(i);
checkedclgid.Add(Convert.ToInt16(dataGridView1.Rows[i].Cells["Delete"].Value));
}
}
foreach (int k in checkedclg)
{
dr = dt.Rows[k];
dt.Rows[k].Delete();
foreach (int j in checkedclgid)
{
OleDbCommand oleDbCommand = new OleDbCommand("DELETE FROM EngColeges WHERE EngClgID = @clgID", acccon);
oleDbCommand.Parameters.Add("@clgID", OleDbType.Integer).Value = j;
oleDbCommand.Prepare();
oleDbCommand.ExecuteNonQuery();

}
}
}

最佳答案

if (Convert.ToBoolean(dataGridView1.Rows[i].Cells["Delete"].Value) == true)
{
checkedclg.Add(i);
checkedclgid.Add(Convert.ToInt16(dataGridView1.Rows[i].Cells["Delete"].Value));
}

似乎传递给 Convert.ToInt16 的单元格值有误?它使用“已删除”列而不是您的 ID 列。

也可以使用where in子句删除一条sql语句中的所有行,例如:DELETE FROM table WHERE id IN (1, 2, 3, 4)

关于c# - 数据没有从数据库中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18504178/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com