DataSet读取XML所遇到的问题客户端调用Web服务传入了一个包含数据的xml字符串,要将该xml里面的数据保存到
DataSet读取XML所遇到的问题
客户端调用Web服务传入了一个包含数据的xml字符串,要将该xml里面的数据保存到数据库,Web服务如下.
C# code [WebMethod(Description = "保存上传的XML到数据库")] public int ReadXmlAndUpdate (string xmlstr) { SqlConnection con = this.createConnection();//已经写好的数据库连接方法-此略 { con.Open(); DataSet ds = new DataSet(); SqlDataAdapter da = new SqlDataAdapter("select top(1)* from t_unit where 1 = 2",con);//获取一个空的架构 da.Fill(ds); ds = XmlStringReader.ReadXmlString(xmlstr); SqlCommandBuilder sqlCmdBuilder = new SqlCommandBuilder(da); da.Update(ds,"t_unit"); ds.AcceptChanges(); con.Close(); return 1; }}
问题出来了,xml包含的数据在数据库中不存在的时候(insert)。没有一点问题,但当xml的数据在数据库中有存在的时候,就会报错。。因为DS初始时是空的,所以
ds = XmlStringReader.ReadXmlString(xmlstr) 生成的全是insert语句或者最后update的时候调用的全是insert方法。就会出现保存错误,提示:主键不能重复。
Xml中可能包含10条左右的数据,也就是说可能存在既有更新的数据,又有插入的数据。请教:怎么处理??
PS:整个上传数据量大约在1000条左右,我在客户端把他们分成若干批上传,上一批xml处理完成之后才能进行下一次,所以,要求web服务端处理时间尽可能的要短。
[解决办法]这只能判断了,用ID,或编码之类的,存在就更新数量,不存在就是插入记录
不要用da.Update(ds,"t_unit");
ds.AcceptChanges();
就可以了
[解决办法]文章页数:[1]
其实非常简单,就是用sqldataadapter的update方法就行了。主要代码例如下所示:
private void update()
{
string link = configurationsettings.appsettings["link_local"].tostring();
sqlconnection conn = new sqlconnection(link);
sqldataadapter da = new sqldataadapter("select order_id, contract from linhai", conn);
dataset ds = new dataset();
da.fill(ds, "linhai");
da.updatecommand = new sqlcommand("update linhai set contract = @contract " + "where order_id = @order_id" , conn);
da.updatecommand.parameters.add("@contract", sqldbtype.nvarchar, 15, "contract");
da.updatecommand.parameters.add("@order_id", sqldbtype.nvarchar, 15, "order_id");
ds.tables["linhai"].rows[0]["contract"] = "ppp";
da.update(ds.tables[0]);
}
-------------------------------------
看看别人是如何使用sqldataadapter更新的!!!
[解决办法]up and study