如何设置DataSet的行状态

keety 2008-04-08 11:10:16
请教一个问题,每周客户都要传一些订单有关的资料给我们,但这份资料有些是新增加的,有的是上一份就有的,只是其中一些内容修改了.以前我们的系统是PowerBuilder开发的,将Excel数据导入到DataWindow中后,然后逐行判断主Key是否存在于数据库中,存在则将行状态设为修改状态,不存在则为新增状态,然后Datawindow.update()就可以了.现在用C#开发系统后,用以下代码只能插入,对于已存在的就没办法处理了,本来逐行读取再判断然后决定是Insert或Update也可以达到目的,但我很好奇, PowerBuilder的处理方式为何在C#中不能处理,好象RowState是不能动态修改的. 谢谢!
string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + sFilePath + ";Extended Properties=Excel 8.0";

OleDbDataAdapter myCommand = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", strConn);

myCommand.AcceptChangesDuringFill = false;
DataSet myDataSet = new DataSet();
myCommand.Fill(myDataSet, "cdrbaph")

SqlConnection Conn = new SqlConnection(DbConfiguration.DbConnectionString);
Conn.Open();
try
{
SqlDataAdapter DaAdapter = new SqlDataAdapter(sSql, Conn);
SqlCommandBuilder Comm = new SqlCommandBuilder(DaAdapter);
DaAdapter.UpdateCommand = Comm.GetUpdateCommand();
DaAdapter.InsertCommand = Comm.GetInsertCommand();
DaAdapter.DeleteCommand = Comm.GetDeleteCommand();
DaAdapter.Update(myDataSet, "cdrbaph");
}
...全文
479 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fuda_1985 2008-04-10
  • 打赏
  • 举报
回复
mark
changjiangzhibin 2008-04-10
  • 打赏
  • 举报
回复
O
marvelstack 2008-04-09
  • 打赏
  • 举报
回复
看来大家对ado.net不是很熟悉,在.net 2.0以后,可以支持DataRow的RowState的修改,
DataRow.SetAdded 方法
========================
将 DataRow 的 Rowstate()更改为 Added。如果当前行未处于 Unchanged 或 Added 状态,则将引发 InvalidOperationException 并显示一条消息,指示只能对 RowState 为 Unchanged 的 DataRow 实例调用 SetAdded。

DataRow.SetModified 方法
=========================
将 DataRow 的 Rowstate()更改为 Modified。如果当前行未处于 Unchanged 或 Added 状态,则将引发 InvalidOperationException 并显示一条消息,指示只能对 RowState 为 Unchanged 的 DataRow 实例调用 SetModified。

至于设置DataRow地删除状态,
DataRow.Delete 方法
==========================
如果该行的 RowState 为 Added,则在调用 AcceptChanges 时,RowState 将变为 Detached,并且将从表中移除该行。
在对现有 DataRow 使用 Delete 方法后,RowState 将变为 Deleted。在您调用 AcceptChanges 之前,它一直保持“已删除”。
可通过调用 RejectChanges 取消删除行。
rangeon 2008-04-09
  • 打赏
  • 举报
回复
学习了
keety 2008-04-09
  • 打赏
  • 举报
回复
以前用PB的DataWindow用习惯了,现在用ADO.NET总感觉不舒服.因为从Excel导入到DataSet的资料很多是存在于数据库的,只是其中某些字段的内容不同而已.我知道用循环逐行判断,存在的就更新,不存在的就插入.但在PB中是很简单的,只需要设置DataWindow的行状态,系统能自动判断是用Insert还是Update,不需要在脚本中写Insert和Update语句.
TNT_1st_excellence 2008-04-08
  • 打赏
  • 举报
回复
myCommand.AcceptChangesDuringFill = false;
DataSet myDataSet = new DataSet();
myCommand.Fill(myDataSet, "cdrbaph")
-------------------------------
myDataSet里面表的行资料的状态都是 Added

所以,你要写代码去修改 myDataSet里面表的资料
dancingbit 2008-04-08
  • 打赏
  • 举报
回复
DataTable有一个Merge方法,可以将两个DataTable合并。

RowState本来就应该是只读的,反映对应的DataRow的状态(新增、修改、删除等)。你要修改这个干吗呢?
journeydj 2008-04-08
  • 打赏
  • 举报
回复
RowState不能改?? 2005? 好像。net2005是只读的。
实在不行可以取出数据库的表来比较
for循环新建的表,
用主键在数据库表中检索,用datatable的select方法
行数大于0,就把新建表的column数据赋给数据库表
行数等于0就新建一行

111,122

社区成员

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

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

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