在DataTable删除行后,为什么更新到数据库不成功?
我的WINForms里面有两个DataGridView控件:Student 和 Result。
当在Student里面选中删除某个学号的行,Result中相关学号的成绩会删除。
代码如下:
private void tsmi_Delete_Click(object sender, EventArgs e)
{
if (dgv_Student.SelectedRows.Count > 0)
{
String StudentNo = dgv_Student.SelectedRows[0].Cells["StudentNo"].Value.ToString();
CheckStudentNoDelete(StudentNo);
Int32 index = dgv_Student.SelectedRows[0].Index;
ds.Tables["Student"].Rows[index].Delete();
}
dgv_Student.DataSource = ds.Tables["Student"];
dgv_Result.DataSource = ds.Tables["Result"];
}
//////////////////////////////////////////////////////////////////////////////////////
private void CheckStudentNoDelete(String StudentNo)
{
DataRow[] rows = ds.Tables["Result"].Select("StudentNo='" + StudentNo + "'");
foreach(DataRow dr in rows)
{
dr.Delete();
}
}
当执行点击保存按钮的时候,把相关修改后的内容更新的数据库中。
为什么Student中的内容可以更新?Result的内容更新不了呢?
更新的代码如下:
public static int SqlDataAdapterUpdate(String sql,DataTable dataTable, ref String msg)
{
try
{
if (conn.State != ConnectionState.Open)
conn.Open();
SqlDataAdapter sda = new SqlDataAdapter(sql, conn);
SqlCommandBuilder scb = new SqlCommandBuilder(sda);
int val = sda.Update(dataTable);
return val;
}
catch (Exception e)
{
return -1;
}
finally
{
conn.Close();
}
}
请指导。。。。。
------解决方案--------------------private void CheckStudentNoDelete(String StudentNo)
{
DataRow[] rows = ds.Tables["Result"].Select("StudentNo='" + StudentNo + "'");
foreach(DataRow dr in rows)
{
dr.Delete();
}
}
你在这里是删除了变量rows中的内容,但是没有删除ds.tables["result"]中的内容,我觉得你应该这样:
dgv_Result.DataSource = ds.Tables["Result"].Select("StudentNo<>'" + StudentNo + "'");
------解决方案--------------------而且lz这样的操作,在数据库中压根就没有做删除操作,建议,在删除student的时候直接在数据库中删除,相应的resault记录,然后再重新读取下resault的数据
------解决方案--------------------SqlDataAdapter sda = new SqlDataAdapter(sql, conn);
SqlCommandBuilder scb = new SqlCommandBuilder(sda);
看看这些代码执行过后sda 里面的删除语句生成了没有,用SqlCommandBuilder生成SqlDataAdapter操作语句的时候sql里面必须有主键
------解决方案--------------------
------解决方案--------------------1.如果你想用SqlDataAdapter.Update,就不必直接操作数据源,只在DG上操作,等你把两个DG上的数据正确后,再去用SqlDataAdapter.Update更新数据源即可,因为操作DG同时,数据源会同时更改。
2.如果不想用这种方法,就直接操作数据库,也就说从DG上取出条件,直接用delete from table where ..
cmd.ExecuteNonQuery()执行,再重新绑定DG
当然还有其他方法,最好不要先去操作中间层,哪样的话数据会乱七八糟
写程序是不是民维的一种体现,思路不清,写的代码也会乱七八糟。
这是我个人的见解,不要见怪!