DataTable讀寫到XML檔案的正確方法(以及對缺少根元素問題的處理)
有時候需要將DataTable資料儲存到xml檔案中,在不使用資料庫的小程式中、在需要通過網路介面傳引數時,經常會有這種需要,操作不好,會出現“缺少根元素”。現在將經過反覆測試沒有錯誤的讀寫兩個方法寫出來,大家可以修改使用。
寫datatable到XML
public static bool dataTable2EncXml(DataTable dt, string strFilePath)
{
try
{
string strMid = "";
MemoryStream ms = new MemoryStream();
StreamWriter sw = new StreamWriter(ms,System.Text.Encoding.UTF8);
dt.WriteXml(sw,XmlWriteMode.WriteSchema); //必須寫入架構,即沒有行資料時,也寫入列等架構內容,否則,沒有行資料時,列資料也會丟失
ms.Position = 0;//復位讀取位置
StreamReader sr = new StreamReader(ms, System.Text.Encoding.UTF8);
strMid = sr.ReadToEnd();
sr.Close();
sw.Close();
ms.Close();
strMid = Encrypting(strMid);//加密
if( WriteToFile(strFilePath, strMid) == -1) return false; //一個簡單的寫文字檔案 的小函式
else return true;
}
catch
{
return false;
}
}
讀XML到datatable,不會提示缺少根元素
/// <summary>
/// 將Xml加密資料讀入DataTable
/// </summary>
/// <param name="filePath">加密XML檔案路徑</param>
public static DataTable Xml2DecDataTable(string filePath)
{
string strMid = ReadFromFile(filePath); //一個簡單的讀文字檔案函式
strMid = Decrypting(strMid); //解密
//先將XML字串讀到xmlDocument中
XmlDocument xd = new XmlDocument();
xd.LoadXml(strMid);
//再存入記憶體流
MemoryStream ms = new MemoryStream();
xd.Save(ms);
ms.Seek(0, SeekOrigin.Begin);
//datatable就可以正確讀取了,不會顯示“缺少根元素”
DataTable dt = new DataTable();
try
{
dt.ReadXml(ms);
}
catch (Exception ex) { }
ms.Dispose();
return dt;
}