本人菜鸟,欢迎好心人,不欢迎喷子
本博客仅记录个人遇到的bug及解决办法,局限性较强。
原因一句话:虽然数据库中有id,但DataTable中id为空——表格还没读取到由数据库自动生成的id,就要根据该id删掉该记录。
(系统:where id = xx
个锤子, 我怎么让数据库听话?这id还被数据库蒙在里面呢!)
解决办法(懒):在adapter.update(dt);
之后重新从数据库读取数据,以获取自动生成的id值。
private void button1_Click(object sender, EventArgs e)
{
adapter.Update(dt);
Init();//重新读取数据,以获得id
}
解决办法(真):实现adapter.RowUpdated
事件,添加一条记录就立刻取出id
void OnRowUpdated(object sender,MySqlRowUpdatedEventArgs e)
{
switch (e.Row.RowState)
{
case DataRowState.Added://如果该记录是新增记录
int? stu_id = Program.myDB.get_a_int("select max(id) from student;");
//将id放到表格中,让系统能读取到id,从而能够删除数据库数据
e.Row["id"] = stu_id;
break;
}
}
void Init(string sql)
{
adapter = new MySqlDataAdapter(sql, conn);
dt = new DataTable();
adapter.Fill(dt);
dataGridView1.DataSource = dt;
MySqlCommandBuilder cb = new MySqlCommandBuilder(adapter);
//绑定事件
adapter.RowUpdated += OnRowUpdated;
}
注意,我的bug是单机操作出现的