65 votes

Comment insérer un octet [] dans une colonne VARBINARY SQL Server

J'ai un tableau d'octets surligné ci-dessous, comment puis-je l'insérer dans une colonne Varbinary de base de données SQL Server?

 byte[] arraytoinsert = new byte[10]{0,1,2,3,4,5,6,7,8,9,10};

string sql = 
    string.format
    (
    "INSERT INTO mssqltable (varbinarycolumn) VALUES ({0});",WHATTODOHERE
    );
 

Merci d'avance les gars!

84voto

David M Points 45808

Essaye ça:

 "0x" + BitConverter.ToString(arraytoinsert).Replace("-", "")
 

Bien que vous devriez vraiment utiliser une requête paramétrée plutôt que la concaténation de chaînes bien sûr ...

74voto

Jason Musgrove Points 2589

Ma solution serait d'utiliser une requête paramétrée, car les objets de connectivité se chargent de formater les données correctement (en s'assurant notamment que le type de données est correct et en évitant les caractères "dangereux" le cas échéant):

 // Assuming "conn" is an open SqlConnection
using(SqlCommand cmd = new SqlCommand("INSERT INTO mssqltable(varbinarycolumn) VALUES (@binaryValue)", conn))
{
    // Replace 8000, below, with the correct size of the field
    cmd.Parameters.Add("@binaryValue", SqlDbType.VarBinary, 8000).Value = arraytoinsert;
    cmd.ExecuteNonQuery();
}
 

Edit: Ajout de l’instruction "using" suggérée par John Saunders pour éliminer correctement la SqlCommand une fois l’opération terminée

1voto

peSHIr Points 3911

Pas de problème si tous les tableaux que vous allez utiliser dans ce scénario sont les petites comme dans votre exemple.

Si vous allez l'utiliser pour de grandes gouttes (par exemple, de stocker de gros fichiers binaires de nombreux Mbs ou même Sgb dans la taille en VARBINARY) alors que vous auriez probablement beaucoup mieux à l'aide d'un soutien spécifique dans SQL Server pour la lecture/écriture des paragraphes de ces grandes gouttes. Des choses comme READTEXT et UPDATETEXT, ou dans des versions de SQL Server SUBSTRING.

Pour plus d'informations et des exemples, voir mon 2006 dans l'article .NET Magazine ("BLOB + Stream = BlobStream", en néerlandais, avec le code source complet), ou une traduction en anglais et la généralisation de ce sur CodeProject par Pierre de Jonghe. Ces deux sont liés à partir de mon blog.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X