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