DataTable保存与读取 stream

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
private void SaveToFile( byte [] value, string filePath)
{
     System.IO.FileStream fs = new System.IO.FileStream(filePath, System.IO.FileMode.OpenOrCreate);
     fs.Write(value, 0, value.Length);
     fs.Flush();
     fs.Close();
}
 
private byte [] ConvertStreamToByteBuffer( string filePath)
{
     System.IO.Stream theStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
     int b1;
     System.IO.MemoryStream tempStream = new System.IO.MemoryStream();
     while ((b1 = theStream.ReadByte()) != -1)
     {
          tempStream.WriteByte((( byte )b1));
      }
     return tempStream.ToArray();
}        
public static byte [] GetsetBinary(DataTable dt)
{          
     byte [] bArrayResult = null ; //用于存放序列化后的数据
     dt.RemotingFormat = SerializationFormat.Binary; //指定DataSet串行化格式是二进制
     MemoryStream ms = new MemoryStream(); //定义内存流对象,用来存放DataSet序列化后的值
     IFormatter IF = new BinaryFormatter(); //产生二进制序列化格式
     IF.Serialize(ms, dt); //串行化到内存中
     bArrayResult = ms.ToArray(); // 将DataSet转化成byte[]
     ms.Close();
     ms.Dispose();
     return bArrayResult;      
}      
public DataTable RetrieveDataSet( byte [] binaryData)
{          
     MemoryStream ms = new MemoryStream(binaryData); //创建内存流
     IFormatter bf = new BinaryFormatter(); //产生二进制序列化格式
     object obj = bf.Deserialize(ms); //反串行化到内存中
     //类型检验
     ms.Close();
     if (obj is DataTable)
     {        
          DataTable dataSetResult = (DataTable)obj;
          return dataSetResult;
     }
     else
     {
           return null ;
      }
}       
public static byte [] GetBytesByImage(System.Drawing.Image image)
{
      byte [] photo_byte = null ;
      using (MemoryStream ms = new MemoryStream())
         {
             Bitmap bmp = new Bitmap(image);
             bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
             photo_byte = new byte [ms.Length];
             ms.Position = 0;
             ms.Read(photo_byte, 0, Convert.ToInt32(ms.Length));
             bmp.Dispose();
         }
 
     return photo_byte;
}           
 
//调用方法:
 
 
DataTable dt = DbHelperSQL.Query(sql);
DataTable newDt = dt.Clone();
newDt.Columns.Add( "photo" , System.Type.GetType( "System.Byte[]" ));
  foreach (DataRow dr in dt.Rows)
  {
        newDt.ImportRow(dr);
        System.Drawing.Image img = System.Drawing.Image.FromFile(StudentPhotoPath(dr[ "PhotoUrl" ].ToString()));
        img = FixedSize(img, 135, 180);
        newDt.Rows[newDt.Rows.Count - 1][ "photo" ] = GetBytesByImage(img);
        img.Dispose();
} byte [] tableByteArray = GetsetBinary(newDt);
SaveToFile(tableByteArray, @"D:\hello.yzd" );
byte [] byteArray = ConvertStreamToByteBuffer( @"D:\hello.yzd" );
DataTable dt = RetrieveDataSet(byteArray);






转载于:https://www.cnblogs.com/yzpopulation/p/4919084.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值