Insérer un tableau d'octets dans SQL Server à partir de C# et comment faire pour le récupérer

J'essaie d'insérer ce tableau d'octets en une base de données SQL Server, le type de données de colonne est varbinary et c'est mon code en C#

SqlParameter param = new SqlParameter("@buffer", SqlDbType.VarBinary, 8000);
param.Value = buffer;

string _query = "INSERT INTO [dbo].[Files] (FileID, Data, Length) VALUES ('" + uID + "','" + buffer + "','" + buffer.Length + "')";

using (SqlCommand comm = new SqlCommand(_query, conn))
{
        comm.Parameters.Add(param);
        try
        {
            conn.Open();

            comm.ExecuteNonQuery();
        }
        catch (SqlException ex)
        {
            return Request.CreateResponse(HttpStatusCode.OK, "Something went wrong : " + ex.Message);
        }
        finally
        {
            conn.Close();
        }
}

J'ai aussi essayé avec @buffer à l'intérieur de la _query chaîne, au lieu de tampon mais je reçois l'erreur :

La conversion de type varchar varbinary n'est pas permis d'utiliser la commande CONVERT pour exécuter cette requête

et j'ai utilisé Convert et il est enregistré avec succès, mais quand je le récupère, il récupère les 14 premiers octets seulement,

byte[] bytearr = (byte[])row["Data"];

J'ai cherché et rien trouvé. Pouvez-vous m'aider à stocker les octets et de la récupérer?

Quelle est la longueur de la colonne varbinary tel qu'il est configuré en SQL?
Pourquoi cette question, obtenir des -1?
Pouvez-vous utiliser une procédure stockée ou elle doit être ad hoc?
Ce code est vulnérable à des attaques par injection sql. C'est pratiquement la mendicité pour avoir piraté.

OriginalL'auteur Ibraheem Al-Saady | 2014-03-31