Сохранить байт [] в базу данных SQL Server из C # - PullRequest
41 голосов
/ 30 октября 2010

Как сохранить массив byte [] в базе данных SQL Server? Этот байт [] содержит значение HashAlgorithm.

Данные снова нужны для дальнейшего использования. Так что преобразовать его и НЕ вернуть обратно в исходное состояние - это не то, что я хочу.

Заранее спасибо!

Ответы [ 4 ]

66 голосов
/ 30 октября 2010

Вы должны иметь возможность написать что-то вроде этого:

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[] в столбец Content типа VARBINARY в вашей таблице SQL Server в виде потока байтов, который вы можете позже снова прочитать 1: 1.

6 голосов
/ 30 октября 2010

Использование VARBINARY

2 голосов
/ 30 октября 2010

Varbinary или CHAR - со значением, преобразованным в гекс. Я делаю это довольно часто со значениями хэшей, потому что это позволяет мне легко УВИДЕТЬ и СРАВНИТЬ их (при выводе данных, во время разработки), а накладные расходы минимальны.

0 голосов
/ 26 февраля 2019

Используя 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];
...