zoukankan      html  css  js  c++  java
  • C# DataTable转换byte

    datatable 转为byte[] 以及把byte[]转为datatable 其实就是系列化与反系列的问题.实际上所有的类都可以使用byte[]形式表示,因为他在内存中的数据本身就是byte

    而对于你说的String进行

    System.Text.Encoding.BigEndianUnicode.GetBytes

    System.Text.Encoding.Default.GetBytes    等等

    这个除了此还有编码读取的功能,对于文本的编码,没有办法,各个国家为了自己的文字存储占更少空间都有各自的标准,对其它国家的文字就支持不好了,当然也有支持各国文字的utf-8等

    第一种方法: 

    请你参考一下,在vs 2008下运行 通过
    引用命名空间
    using System.IO;
    using System.Runtime.Serialization.Formatters.Binary;

    代码段:

    DataTable dt = new DataTable(); //用来转成byte[]的实例
    dt.Columns.Add("a");
    dt.Rows.Add("b"); //添加一条测试数据 b
    System.IO.MemoryStream memory = new MemoryStream();//使用内存流来存这些byte[]
    BinaryFormatter b = new BinaryFormatter();
    b.Serialize(memory,dt); //系列化datatable,MS已经对datatable实现了系列化接口,如果你自定义的类要系列化,实现IFormatter 就可以类似做法
    byte[] buff = memory.GetBuffer(); //这里就可你想要的byte[],可以使用它来传输
    memory.Close();

    //假如接收的仍是这个byte[] buff,这样来反系列化

    DataTable dt1 = (DataTable)b.Deserialize(new MemoryStream(buff)); //dt1是byte[]转回的datatable
    Response.Write(dt1.Rows[0][0].ToString());

    //输出的是 "b"

    第二种方法

          MemoryStream memory = new MemoryStream();
          System.Xml.XmlTextWriter xtw = new System.Xml.XmlTextWriter(memory, System.Text.Encoding.UTF8);

          dt.WriteXml(memory);
          int count = (int)memory.Length;
          byte[] temp = new byte[count];
          memory.Seek(0, SeekOrigin.Begin);
          memory.Read(temp, 0, count);
          string returnValue = Convert.ToBase64String(temp);
          return returnValue;

           读取字符串信息
                byte[] bstr = Convert.FromBase64String(strType);
                System.Text.Encoding ed=System.Text.Encoding.UTF8;
                string returnValue = ed.GetString(bstr, 0, bstr.Length).Trim();

             //  把字节转换成datatable     

               MemoryStream ms=new MemoryStream(bstr);
               System.Xml.XmlTextReader xtw = new System.Xml.XmlTextReader(ms);
               ds.ReadXml(xtw);

  • 相关阅读:
    Oracle中job的使用详解
    Control File (二)重建CONTROLFILE --- NORESETLOG
    Oracle Analyze 命令 详解
    深入学习Oracle分区表及分区索引
    B树索引和位图索引的区别!
    RAID0_RAID1_RAID10_RAID5各需几块盘才可组建
    Oracle IO优化心得
    修改dbwr后台进程数量
    查看ORACLE执行计划的几种常用方法
    printf()格式化输出详解及echo带颜色输出
  • 原文地址:https://www.cnblogs.com/sunrise/p/1614474.html
Copyright © 2011-2022 走看看