通过DataSet删除表中所有记录

qhlonline 2008-06-08 09:42:43
写了一段代码。VS2005下C#语言。代码目的就是查看当前的表中,是否表中已经有记录,如果有,则清空该表,以备写入数据。可是我用下面这样一段代码清空DataSet中数据,然后用Update将修改映射回原表实,发现DataSet中的数据被删除了,可是表中数据还没有删除。这是从一个教程中看得代码,难道写的有问题吗?发现用了这个DataSet只能对表中数据写入,不能更新和删除记录,这是怎么回事啊?请大牛多多帮助,谢谢!

附代码:
thisConnection = new SqlConnection("Data Source=(local);Database=ShortMessageHotSpot;Persist Security Info=True;User ID=sa; pwd=;");
thisAdaper = new SqlDataAdapter("SELECT * From " + table, thisConnection);
thisCommandBuilder = new SqlCommandBuilder(thisAdaper);
thisDataSet = new DataSet();
thisAdaper.Fill(thisDataSet, table);
tableName = table;
if (thisDataSet.Tables[tableName].Rows.Count != 0)
{
Console.WriteLine("\n Great Change :"+thisDataSet.Tables[tableName].Rows.Count);
thisDataSet.Tables[tableName].Rows.Clear();
// thisDataSet.Tables[tableName].Clear();
Console.WriteLine("\n Great Change Take Place :" + thisDataSet.Tables[tableName].Rows.Count);
thisAdaper.Update(thisDataSet, tableName);
}
...全文
549 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
qhlonline 2008-06-12
  • 打赏
  • 举报
回复
哦,是这样啊。用Delete确实可以。但是调用完后,DataSet.Tables[].Rows.Count不为0。但是确实可以把删除操作更新到数据库中去。而RowsClear()只能删除DataSet中的数据,不修改源数据库中的表。还有DataRow.Remove()也是只删除DataSet中的记录,而不能把删除操作结果更新到数据库中去。谢谢你们帮忙!
hanjoe109 2008-06-10
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 amandag 的回复:]
用Rows.Clear()没有给行做标记(添加,删除,修改);
而用Row.Delete是为了给这行做个删除标记,这样DataSet更新数据库的时候才会进行删除
[/Quote]
amandag 2008-06-10
  • 打赏
  • 举报
回复
用Rows.Clear()没有给行做标记(添加,删除,修改);
而用Row.Delete是为了给这行做个删除标记,这样DataSet更新数据库的时候才会进行删除
qhlonline 2008-06-10
  • 打赏
  • 举报
回复
算了,先结贴吧。哪位高手有指导意见请继续发帖。
qhlonline 2008-06-09
  • 打赏
  • 举报
回复
我断点调试过了,可是因为技术不熟,也没找出什么错来。我在断点的时候,应该注意哪些语句可能出错呢?
qhlonline 2008-06-09
  • 打赏
  • 举报
回复
update不就是按照表在DataSet内存块中的映射值,再去更新表中的值么?好像说可以执行修改、添加和删除操作阿
lya121 2008-06-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 qhlonline 的回复:]
lya121,你的意思是直接写表的名字字符串而不用变量传递表名字?可是往表中写数据的时候没有错误啊?这说明传递表名字着一块没有错误啊?
[/Quote]

那要是这样的话……
你用断点调试一下。
qhlonline 2008-06-09
  • 打赏
  • 举报
回复
lya121,你的意思是直接写表的名字字符串而不用变量传递表名字?可是往表中写数据的时候没有错误啊?这说明传递表名字着一块没有错误啊?
wudi626 2008-06-09
  • 打赏
  • 举报
回复
可能问题是出现在update()里头,它只能拿来更新数据,而楼主想要实现的是删除所有数据的嘛~~~

推测的
qhlonline 2008-06-09
  • 打赏
  • 举报
回复
foreach不是只读不能修改么?我那段代码是根据教程上改的,实在不知道有什么错误啊。可是运行了N遍都不行,每次都是没有清除表中原来的内容。
qhlonline 2008-06-09
  • 打赏
  • 举报
回复
后来我又测试了update修改记录中的数据。发现不能自动生成命令,因为没有主键。于是我定义了一个主键,可以修改记录中的数据了,但是还是不能删除表格中的数据。我用了
thisDataSet.Tables[tableName].Rows.Clear();
thisDataSet.Tables[tableName].Clear();
thisDataSet.Clear();
都试过了,都不行啊,天啊,到底怎么了这是,为什么就是不行呢。amandag朋友建议用foreach一个一个的删除。不是内存中的DataSet中的数据没法删除,经过运行后发现,内存中的DataSet表中内容已经空了,其Count=0,但是更新不到SQLServer数据库中啊,这个是关键。这个纯粹是为了熟悉这个用法。其实完成这个功能用SqlCommand对象应该可以,但是我在学习中呢,想学的透彻一点。所以哪位前辈知道可能存在的毛病什么的,希望不吝赐教,谢谢!
amandag 2008-06-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 qhlonline 的回复:]
foreach不是只读不能修改么?我那段代码是根据教程上改的,实在不知道有什么错误啊。可是运行了N遍都不行,每次都是没有清除表中原来的内容。
[/Quote]

1. 楼主用foreach试过这段代码么?
2. foreach只读是指引用变量之读,并不代表引用的对象只读
simonllf 2008-06-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 amandag 的回复:]
thisDataSet.Tables[tableName].Rows.Clear();
==
foreach (DataRow row in thisDataSet.Tables[tableName].Rows)
{
row.Delete();
}
[/Quote]

这个应该可以了
amandag 2008-06-08
  • 打赏
  • 举报
回复
thisDataSet.Tables[tableName].Rows.Clear();
==
foreach (DataRow row in thisDataSet.Tables[tableName].Rows)
{
row.Delete();
}
lya121 2008-06-08
  • 打赏
  • 举报
回复
第二行显示的是多少?如果是0 没理由不成功。

建议你这里thisAdaper.Fill(thisDataSet, “MyTable”);

把后面的tableName 全换成“MyTable”
试试看。
实在找不出错。

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧