转换一个byte []数组数据表 [英] Convert a byte[] array into DataTable

查看:173
本文介绍了转换一个byte []数组数据表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在VARBINARY类型字段保存类型的DataTable对象到SQL 2005数据库。我想找回它回来,但我无法键入投它。这是我救了它。

I saved an object of type DataTable into SQL 2005 database in a field of type varbinary. I want to retrieve it back but I wasn't able to type cast it. This is how i saved it.

MemoryStream memStream = new MemoryStream();
    StreamWriter sw = new StreamWriter(memStream);

sw.Write(dt);
con.Open();
using (SqlCommand cmd = new SqlCommand("INSERT INTO Tables(TableName, TableData, QuestionID) VALUES (@TableName, @TableData, @QuestionID)", con))
{
    cmd.Parameters.Add("@TableName", SqlDbType.VarChar).Value = "a new table";
    cmd.Parameters.Add("@TableData", SqlDbType.VarBinary,Int32.MaxValue).Value = memStream.GetBuffer();
    cmd.Parameters.Add("@QuestionID", SqlDbType.VarChar).Value = "2";
    cmd.ExecuteNonQuery();

}

在DT是DataTable对象实例。

The 'dt' is the DataTable object instance.

推荐答案

你的说的是二进制序列化和反序列化。也许会有所帮助。

What your talking about is Binary Serialization and Deserialization. Maybe this will help.

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Data;
using System.Text;

namespace Serial
{
    public class Ser
    {
    	public static byte[] StrToByteArray(string str)
    	{
    		UTF8Encoding  encoding = new UTF8Encoding ();
    		return encoding.GetBytes(str);
    	}

    	public static string ByteArrayToStr(byte[] barr)
    	{
    		UTF8Encoding  encoding = new UTF8Encoding ();
    		return encoding.GetString(barr, 0, barr.Length);
    	}

    	public static void Main(String[] args)
    	{
    		DataTable dt = new DataTable();
    		DataRow dr;

    		dt.Columns.Add(new DataColumn("IntegerValue", typeof(Int32)));
    		dt.Columns.Add(new DataColumn("StringValue", typeof(string)));
    		dt.Columns.Add(new DataColumn("DateTimeValue", typeof(DateTime)));
    		dt.Columns.Add(new DataColumn("BooleanValue", typeof(bool)));

    		for (int i = 1; i <= 1; i++) 
    		{

    			dr = dt.NewRow();

    			dr[0] = i;
    			dr[1] = "Item " + i.ToString();
    			dr[2] = DateTime.Now;
    			dr[3] = (i % 2 != 0) ? true : false;

    			dt.Rows.Add(dr);
    		}

    		//Serialize
    		BinaryFormatter bformatter = new BinaryFormatter();
    		MemoryStream  stream = new MemoryStream();

    		string s;
    		bformatter.Serialize(stream, dt);
    		byte[] b = stream.ToArray();
    		s = ByteArrayToStr(b);
    		stream.Close();
    		dt = null;

    		//Now deserialise
    		bformatter = new BinaryFormatter();
    		byte[] d;
    		d = StrToByteArray(s);
    		stream = new MemoryStream(d);
    		dt = (DataTable)bformatter.Deserialize(stream);
    		stream.Close();
    	}
    }
}

这篇关于转换一个byte []数组数据表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆