web-dev-qa-db-ja.com

byte []をC#からSQL Serverデータベースに保存します

Byte []配列をSQL Serverデータベースに保存するにはどうすればよいですか?このbyte []に​​はHashAlgorithm値が含まれています。

データは後で使用するために再び必要です。したがって、変換して元の状態に戻さないことは、私が望んでいることではありません。

前もって感謝します!

44
Yustme

このようなものを書くことができるはずです:

string queryStmt = "INSERT INTO dbo.YourTable(Content) VALUES(@Content)";

using(SqlConnection _con = new SqlConnection(--your-connection-string-here--))
using(SqlCommand _cmd = new SqlCommand(queryStmt, _con))
{
   SqlParameter param = _cmd.Parameters.Add("@Content", SqlDbType.VarBinary);
   param.Value = YourByteArrayVariableHere;

   _con.Open();
   _cmd.ExecuteNonQuery();
   _con.Close();
}

Linq-to-SQLを使用すると、次のように記述できます。

using(YourDataContextHere ctx = new YourDataContextHere())
{
   SomeClassOfYours item = new SomeClassOfYours();

   item.ByteContent = (your byte content here);

   ctx.SomeClassOfYourses.InsertOnSubmit(item);
   ctx.SubmitChanges();
}

これにより、byte[]がバイトストリームとしてSQL ServerテーブルのContent型のVARBINARY列に挿入されます。これは、後で1:1で再度読み取ることができます。

68
marc_s

VARBINARYを使用

6
anivas

VarbinaryまたはCHAR-値が16進数に変換されます。ハッシュ値を使用してかなり頻繁にそれを行います。これにより、(参照中、開発中に)それらを簡単に参照および比較でき、オーバーヘッドが最小限に抑えられるためです。

2
TomTom

Dapperを使用すると、次のようにHTMLコードを簡単に保存できます。

using (var con = DapperConnection.Con)
{
    string firstValue = "any text...";
    string secondValue = "HTML code maybe ?";

    // Convert your string into byte array:
    byte[] htmlCode = Encoding.ASCII.GetBytes(secondValue);

    // Define your insert query and execute it:
    con.Execute($@" INSERT INTO [dbo].[YourTableName]
                    ( [firstColumnName], [secondColumnName] )
                    VALUES
                    ( {firstValue}, COMPRESS(@HTML) )", new { HTML = htmlCode });
}

次に、次のようにデータベースから解凍します。

SELECT [firstColumnName], CONVERT(varchar(MAX), DECOMPRESS([secondColumnName])) FROM [YourTableName];
0