本帖最后由 zqkun520 于 2011-05-25 15:49:33 编辑

解决方案 »

  1.   

    使用 DataAdapter的Fill方法,将数据库中的数据填充到DataSet
    使用 DataSet的WriteXML方法,将DataSet的数据写入XML
    使用 DataSet的ReadXML方法,将XML数据写入DataSet
    使用 DataAdapter的Update方法,将DataSet中的数据保存数据库
      

  2.   

    1. 把这个table的数据写入到dataset里?
    4. 把dataset的数据写回到database里?
    ADO.NET对象的操作,百度一下,一大堆。
    对于对XML文件的操作,给你个Demo,使用XmlDocument对象来处理。mlDocument xmldoc; 
            XmlNode xmlnode;        
     
            public void save()
            {
                string path="c:\\reminder.xml";            
                if (!File.Exists(path))
                {
                    xmldoc = new XmlDocument();  
                    //加入XML的声明段落  
                    xmlnode = xmldoc.CreateNode ( XmlNodeType.XmlDeclaration , "" , "" ) ;  
                    xmldoc.AppendChild ( xmlnode ) ;  
                    //加入一个根元素 
                    XmlElement r = xmldoc.CreateElement("r");
                    XmlElement l = xmldoc.CreateElement("location");
                    XmlElement x = xmldoc.CreateElement("locationX");
                    XmlElement y = xmldoc.CreateElement("locationY");
                    XmlText xValue = xmldoc.CreateTextNode("1000");
                    x.AppendChild(xValue);
                    XmlText yValue = xmldoc.CreateTextNode("200");
                    y.AppendChild(yValue);
                    l.AppendChild(x);
                    l.AppendChild(y);
                    r.AppendChild(l);                  
                    //加入另外一个元素  
                    XmlElement text = xmldoc.CreateElement("text");
                    XmlElement size = xmldoc.CreateElement("size");
                    XmlElement color = xmldoc.CreateElement("color");
                    XmlElement t = xmldoc.CreateElement("txt");
                    XmlText sizeValue = xmldoc.CreateTextNode("30");
                    size.AppendChild(sizeValue);
                    XmlText colorValue = xmldoc.CreateTextNode("Black");
                    color.AppendChild(colorValue);
                    XmlText txtValue = xmldoc.CreateTextNode("");
                    t.AppendChild(txtValue);
                    text.AppendChild(size);
                    text.AppendChild(color);
                    text.AppendChild(t);
                    r.AppendChild(text);
                    //加入另外一个元素 
                    xmldoc.AppendChild ( r ) ;
                    try  {  
                        xmldoc.Save (path ) ;   
                    }  
                    catch ( Exception e )  { 
                        //显示错误信息  
                        Console.WriteLine ( e.Message ) ;  
                    }       
                }
            }
      

  3.   

    额…… ds.WriteXml(Stream s);
     ds.ReadXml(Stream s);有现成的方法供你调用.
      

  4.   

    OK, 这4个方法单独用都可以,谢谢大家,但是有些问题啊,比如如果这样:
    1. 用Fill把database里的数据放到dataset ds里;
    2. 把dataset ds用writeXML 写进xml里;
    3. 重新创建一个dataset dsNew,然后用ReadXML读之前生成的xml;
    4. 问题出现在这里,当需要把dsNew写进database里,就会出现各种各样的问题,不信你们有database的可以test下,我是这样test的:class Program{static void Main()
    {
    // Step 1: Write data to DataSet from Database.
    DataSet ds = new DataSet();
    string connString = "Data Source= MyAccount\\SQLEXPRESS;Initial Catalog=DBTest1;Integrated Security=SSPI;";
    SqlConnection conn = new SqlConnection(connString);
    conn.Open();
    SqlDataAdapter dAdapt = new SqlDataAdapter("SELECT * FROM User Where UserID='a'", conn);
    dAdapt.FillSchema(ds, SchemaType.Source, "User");
    dAdapt.Fill(ds, "svt1_User");// Step 2: write DataSet to XML.
    ds.WriteXml("svt1_User.xml", XmlWriteMode.WriteSchema);// Step 3: Write XML to New Dataset.
    DataSet newDS = new DataSet();
    newDS.ReadXml("User.xml", XmlReadMode.ReadSchema);
    newDS.Tables[0].Rows[0]["Score"] = 212;
    newDS.WriteXml("svt1_User_new.xml", XmlWriteMode.WriteSchema);// Step 4: Write DataSet to Database.
    dAdapt.UpdateCommand = new SqlCommandBuilder(dAdapt).GetUpdateCommand();
    dAdapt.Update(newDS, "User");
    conn.Close();
    }
    }
    里面我做过各种更改,但是相应的出过各种error,
    比如“object reference not set to an instance of an object”,
    “violation of primary key constraint. Cannot insert duplicate key in object”,
    “update requires a valid updatecommand when passed datarow collection with modified rows”。
    ><...
    我觉得问题可能是我创建了一个新的dataset dsNew。
    到底怎么把xml装进dataset里之后把这个dataset直接update去database(sql server)??
      

  5.   


                // Step 1: Write data to DataSet from Database.
                DataSet ds = new DataSet();
                string connString = "Data Source= MyAccount\\SQLEXPRESS;Initial Catalog=DBTest1;Integrated Security=SSPI;";
                SqlConnection conn = new SqlConnection(connString);
                conn.Open();
                SqlDataAdapter dAdapt = new SqlDataAdapter("SELECT * FROM [User] where UserID='a'", conn);
                //dAdapt.FillSchema(ds, SchemaType.Source,"[User]");
                dAdapt.Fill(ds, "svt1_User");            // Step 2: write DataSet to XML.
                ds.WriteXml("svt1_User.xml", XmlWriteMode.WriteSchema);            // Step 3: Write XML to New Dataset.
                DataSet newDS = new DataSet();
                newDS.ReadXml("svt1_User.xml", XmlReadMode.ReadSchema);
                newDS.Tables["svt1_User"].AcceptChanges();
                newDS.Tables["svt1_User"].Rows[0]["Score"] = 212;
                newDS.WriteXml("svt1_User_new.xml", XmlWriteMode.WriteSchema);
                
                // Step 4: Write DataSet to Database.
                dAdapt.UpdateCommand = new SqlCommandBuilder(dAdapt).GetUpdateCommand();
                int i = dAdapt.Update(newDS, "svt1_User");
                conn.Close();
    读取后记得newDS.Tables["svt1_User"].AcceptChanges();
    还有你那句dAdapt.FillSchema(ds, SchemaType.Source,"[User]");没啥用处
      

  6.   

    int i = dAdapt.Update(newDS, "svt1_User");这里int i可以删掉,我调试的时候用的。。
      

  7.   

    楼主同志
    当你 知道DataBase DataTable XML 大概是个什么结构的时候 就知道怎么转换了直接查 MSDN      这种代码 学学 就知道怎么写了
      

  8.   

    如果xml当初是通过DataSet生成的,那么可以参考:http://www.google.com.hk/search?q=dataset.getxml&hl=zh-CN&lr=lang_zh-CN&safe=strict&biw=1022&bih=539&tbs=lr:lang_1zh-CN&prmd=ivnsfd&source=lnt&sa=X&ei=_hzdTaH0BIumuAPY05ysDw&ved=0CAsQpwUoAghttp://www.google.com.hk/search?q=dataset.readxml&hl=zh-CN&lr=lang_zh-CN|lang_zh-TW&safe=strict&biw=1022&bih=539&tbs=lr:lang_1zh-CN|lang_1zh-TW&prmd=ivns&source=lnt&sa=X&ei=Tx3dTYaXI4jUvQOnmaGiDw&ved=0CAoQpwUoAQ
      

  9.   

    如果你创建dsNew,那么你应该重新从数据库Fill一下来创建架构。你的查询只需要返回第一条记录(top 1)就能创建一个正确的dsNew。
      

  10.   

    msdn上也有一个创建DataSet然后读入xml的例子。http://msdn.microsoft.com/zh-cn/library/360dye2a.aspx不过我从来不用DataSet、DataTable,我只是使用强类型的List<T>来编程。
      

  11.   


    谢啦~加了AcceptChanges()就可以了,但是还有一种情况我怎么是也不行,就是直从xml里读数据,然后直接update database,我是这么试的:string connString = "Data Source= MyAccount\\SQLEXPRESS;Initial Catalog=DBTest1;Integrated Security=SSPI;";
    SqlConnection conn = new SqlConnection(connString);
    conn.Open();
    SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM [svt1_User] WHERE UserID='a'", conn);
    DataSet ds = new DataSet();
    ds.ReadXML("svt1_User.xml", XmlReadMode.ReadSchema);
    ds.Tables["svt1_User"].AcceptChanges();da.UpdateCommand = new SqlCommandBuilder(da).GetUpdateCommand();
    da.Update(ds, "svt1_User");
    conn.Close();
    运行OK,但是没有update到database,是不是少了什么呢?
      

  12.   


    有考虑过用其他的数据结构,但是如果程序结束而且没有网络连接的时候,数据就无法保存了,所以我要用到xml...
      

  13.   

    我也发现好像只能Fill一下后才可以,没有其它方法了??
      

  14.   


    你要明白AcceptChanges这个方法的作用到底是什么别什么都照搬。。
      

  15.   

    恩,弄明白了,其实不需要AcceptChanges这个方法,谢拉~