有时候需要将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; }