web-dev-qa-db-fra.com

Enregistrer l'octet [] dans une base de données SQL Server à partir de C #

Comment puis-je enregistrer un tableau d'octets [] dans une base de données SQL Server? Cet octet [] contient une valeur HashAlgorithm.

Les données sont à nouveau nécessaires pour une utilisation ultérieure. Donc, le convertir et ne pas le remettre dans son état d'origine, ce n'est pas ce que je veux.

Merci d'avance!

44
Yustme

Vous devriez pouvoir écrire quelque chose comme ceci:

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();
}

En utilisant Linq-to-SQL, vous écririez quelque chose comme ceci:

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

   item.ByteContent = (your byte content here);

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

Cela insérera votre byte[] dans une colonne Content de type VARBINARY dans votre table SQL Server sous forme de flux d'octets, que vous pourrez relire 1: 1 plus tard.

68
marc_s

Utilisez VARBINARY

6
anivas

Varbinaire ou CHAR - avec la valeur convertie en hexadécimal. Je le fais assez souvent avec des valeurs de hachage car cela me permet de les VOIR et de LES COMPARER facilement (lors des rintouts, pendant le développement), et la surcharge est minime.

2
TomTom

En utilisant Dapper, vous pouvez enregistrer facilement du code HTML comme ceci:

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 });
}

Vous pouvez ensuite le DÉCOMPRIMER à partir d'une base de données comme celle-ci:

SELECT [firstColumnName], CONVERT(varchar(MAX), DECOMPRESS([secondColumnName])) FROM [YourTableName];
0
Felipe de Macêdo