代码人生的小狗窝

一行行枯燥的代码,却描绘出人生的点点滴滴

您现在的位置是:首页>_ASP.NET

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

发布时间:2019-08-20浏览(2239)

    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