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