DataTable读写到XML文件的正确方法(以及对缺少根元素问题的处理)

来源:互联网 发布:淘宝联盟qq推广 编辑:程序博客网 时间:2024/05/22 00:37

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




0 0
原创粉丝点击