C# 用DataSet.ReadXMl()读取数据后,更新数据库。怎么实现

txl0918 2012-04-01 06:22:42
<?xml version="1.0" encoding="utf-8" ?>
<Pre>
<test>
<c>301</c>
<c1>1001</c1>
<c2>222</c2>
</test>
<test>
<c>302</c>
<c1>61</c1>
<c2>2002</c2>
</test>
<test>
<c>303</c>
<c1>71</c1>
<c2>3003</c2>
</test>
</Pre>
上面是XML格式的数据

CREATE TABLE [dbo].[t_Test](
[iSeq] [int] IDENTITY(1,1) NOT NULL,
[cID] [nchar](10) NULL,
[cXM] [nchar](10) NULL,
CONSTRAINT [PK_t_Test] PRIMARY KEY CLUSTERED
(
[iSeq] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
上面是表结构

SqlConnection myConn = new SqlConnection("Server=.;database=SCM_CTM_Test;UID=;PWD=;Connect Timeout=300;");
DataSet ds = new DataSet();//更新的表必须有一个主键,iSeq就是主键
ds.ReadXml(Application.StartupPath + "\\Test.xml");
ds.Tables[0].TableName = "t_Ds";
SqlDataAdapter myDa = new SqlDataAdapter("select iSeq as c,cID as c1,cXM as c2 from t_Test", myConn);
SqlCommandBuilder myBu = new SqlCommandBuilder(myDa);
myDa.Update(ds, "t_Ds");
ds.AcceptChanges();

这段代码,为什么不能实现更新t_Test表中iSeq = 301,302,303的数据,而是插入3条新的数据呢?

求解答!!!!!!
...全文
469 点赞 收藏 2
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
SaintTinyBoy 2013-02-12
你这段代码只能插入一条记录吧,你的DATASET中有3张表, ds.Tables[0].TableName = "t_Ds";myDa.Update(ds, "t_Ds");这两句只插入了第一张表。
回复
机器人 2012-04-01
Insert, 还是 Update 根据的是 DataTable.Rows[n].RowState 判断的。

用 ReadXml 读进来的是 Added 状态,所以变成 Insert 了。

如果你是想要 Update 可以先 AcceptChanges 之后,修改某些列值再做一次。
回复
相关推荐
发帖
C#
创建于2007-09-28

10.6w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2012-04-01 06:22
社区公告

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