在DataTable删除行后,为什么更新到数据库不成功?该怎么处理
发布时间:2011-06-21 11:31:26 文章来源:www.iduyao.cn 采编人员:星星草
在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
当然还有其他方法,最好不要先去操作中间层,哪样的话数据会乱七八糟
写程序是不是民维的一种体现,思路不清,写的代码也会乱七八糟。
这是我个人的见解,不要见怪!
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
C#读取文本并入库
文本格式固定如下:
**********************:
<中文作者一>=赵逢玲
<中文作者二>=杜秀华
<中文作者三>=王翠东
<中...
-
C#操作Word文档(Office 2007)
首先引入类库,Microsoft.Office.Interop.Word,然后进行编程。代码如下:
using ...
-
请问,ReadLine方法读取文件
一个txt文件,有两行
aaaa
bbbb
代码:
string s1 = @"D:iosamplepp.txt";
using (StreamReader sr = new...
-
验证控件
在gridview页脚行添加了验证控件,可是点击编辑更新时触发了验证事件,无法更新,怎么办?
------解决方案-------------------...
-
在BITMAP上用GDI+画图,如何使画出的图像尽可能清晰?
我在一张bitmap上用GDI+绘制了简单的多边形,并用PictureBox显示。
我发现,如果我...
-
???如何利用webbrower获取ifream元素????
如何利用webbrower获取ifream元素.我在GOOGLE,BAIDU一整天依然无法找到解决方法!!希望各...
-
如何解决“已有打开的与此命令相关联的DataReader,必须首先将它关闭。”错误?
小弟写了一个DBHelper类来控制数据库访问,但是在实际...
-
在做asp.net项目时,在做数据库更新时出现',' 附近有语法错误。(数据库是用sql2000的)
数据库更新语句:
public void Update()
...
-
为什么我这段代码不会发出声音呢?
C# code
using System;
using System.Collections.Generic;
using System.ComponentModel;
usi...
-
ClickOnce 不支持请求执行级别requireAdministrator
写了一个应用程序,使用ServiceController控制 windows服务的的启动和停止。
...