读书人

DataSet读取XML所遇到的有关问题

发布时间: 2012-02-16 21:30:36 作者: rapoo

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

读书人网 >asp.net

热点推荐