DataSet與Xml之間的轉換
DataSet轉化爲Xml,Xml轉化爲DataSet,Ado.net中使用方法DataSet.WriteXml()和DataSet.ReadXml(),由於有多個重載方法,所以這裏有多條路徑可以實現,可謂條條大道通羅馬。這裏我就把所有的用法來嘗試下,希望給大家有個借鑑作用。 因爲DataSet.ReadXml()和DataSet.WriteXml()共8種重載方法,前四種是不帶架構的,後四種帶架構。這裏舉出帶架構的4種方法。 /// <summary> /// DataSet和Xml之間的轉換 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void DsAndXml_Click(object sender, EventArgs e) { //自定義一個DataSet,裏面有一列a,一行值爲"hello world!",Xml數據從這個數據集中來讀取 DataSet dsWrite = new DataSet(); DataTable dt = new DataTable(); dt.Columns.Add("a", typeof(string)); DataRow dr = dt.NewRow(); dr[0] = "hello world!"; dt.Rows.Add(dr); dsWrite.Tables.Add(dt); //自定義一個DataSet用來從xml中讀取數據 DataSet dsRead = new DataSet(); int k = Convert.ToInt32(this.textBox1.Text.ToString());//第幾種重載 switch(k) { //第一種使用stream case 1: //創建文件流,將DataSet中的數據寫入文件流中 Stream stream = new FileStream(@System.AppDomain.CurrentDomain.BaseDirectory.ToString()+"Test.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite); //dsWrite.WriteXml(stream);//不帶架構 dsWrite.WriteXml(stream, XmlWriteMode.WriteSchema);//將架構一起寫入文件流 stream.Close(); //從文件裏讀取 dsRead.ReadXml(@System.AppDomain.CurrentDomain.BaseDirectory.ToString() + "Test.txt"); break; //第二種使用FileName case 2: //寫出 dsWrite.WriteXml(@System.AppDomain.CurrentDomain.BaseDirectory.ToString() + "Test.txt"); //讀入 dsRead.ReadXml(@System.AppDomain.CurrentDomain.BaseDirectory.ToString() + "Test.txt"); break; //第三種使用XmlTextWriter case 3: //寫出 StringBuilder s1 = new StringBuilder(); TextWriter tw1 = new StringWriter(s1); System.Xml.XmlTextWriter xtw1= new System.Xml.XmlTextWriter(tw1); dsWrite.WriteXml(xtw1,XmlWriteMode.WriteSchema); string xml1 = s1.ToString(); //讀入 TextReader tr1 = new StringReader(xml1); dsRead.ReadXml(tr1,XmlReadMode.ReadSchema); //System.Xml.XmlReader xr = System.Xml.XmlReader.Create(tr1); //dsRead.ReadXml(xr); break; //第四種使用TextReader、TextWriter case 4: //DataSet轉化爲xml StringBuilder s = new StringBuilder(); TextWriter tw = new StringWriter(s); dsWrite.WriteXml(tw, XmlWriteMode.WriteSchema); string xml = s.ToString(); //xml轉化爲DataSet TextReader tr = new StringReader(xml); dsRead.ReadXml(tr,XmlReadMode.ReadSchema); break; default: break; } }