に変換するbyte[]配列DataTable
-
18-09-2019 - |
質問
た保存型のオブジェクトDataTableへのSQL2005年のデータベースの分野での型varbinary.を取り込んでもする事が出来なかったタイプキャストします。このようにのんびりと保存されます。
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 objectインスタンスです。
解決
何あなたが話して、バイナリシリアル化と逆シリアル化です。たぶん、このには役立ちます。
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();
}
}
}
他のヒント
私たい期待を裏切に、少なくともませんが作成した拡張法のStreamWriterを扱うクラスターテーブルです。
の過負荷の Write
法を受け入れるDataTableインスタンスをとるオブジェクトは、当 MSDN書, でのみ保存する"テキスト表現"のオブジェクトです。
いっしょにいきます。ToStringメソッドのDataTableの出力を文字列形式を含むすべてのコンテンツのDataTableインスタンスが、alas.きます。ToStringメソッドのみ 返品の内容物件の配列, 表示表現の場があります。
なん保存されないの内容をDataTableインスタンスは全て、名前の表に示す。
す拡大する見通しとなってい 直列化, できることをバイナリはXMLで表現すべてのコンテンツのDataTableオブジェクトです。
私は、データテーブルをシリアライズし、あなたがそれをデシリアライズする必要があなたのコードを前提としています。私が使用したものフォーマッタを知らないので、あなたは、あなたのコンテンツのバイナリフィールドを確認する必要があります。それがバイナリである場合は、 BinaryFormater の(ページ下のコード例を参照してください)。それはバイナリでない場合は、 SoapFormatterしてみてくださいと XmlSerializerをする。
あなたはのDataTableをシリアル化して、バイナリ列に格納するのXmlSerializerかにBinaryFormatterを使用したほうが良いかもしれません。
:これを行うには、
リンク
http://sadeveloper.net/forums/p/439/1772.aspx
http://bytes.com/topic/net/answers/428472-serializing-データテーブルの