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条新的数据呢?

求解答!!!!!!
...全文
510 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
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 之后,修改某些列值再做一次。

110,571

社区成员

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

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

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