¿Cómo inserto un byte en una columna VARBINARIA de SQL Server?

Tengo una matriz de bytes resaltada a continuación, ¿cómo la inserto en una columna Varbinary de la base de datos de SQL Server?

byte[] arraytoinsert = new byte[10]{0,1,2,3,4,5,6,7,8,9}; string sql = string.format ( "INSERT INTO mssqltable (varbinarycolumn) VALUES ({0});",WHATTODOHERE ); 

Gracias de antemano chicos!

Mi solución sería usar una consulta parametrizada, ya que los objetos de conectividad se encargan de formatear los datos correctamente (lo que incluye garantizar el tipo de datos correcto y escapar de los caracteres “peligrosos” cuando corresponda):

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

Editar: se agregó la statement de “uso” de ajuste según lo sugerido por John Saunders para desechar correctamente el SqlCommand después de que se haya terminado con

Prueba esto:

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

Aunque en realidad debería usar una consulta parametrizada en lugar de una concatenación de cadenas, por supuesto …

No hay problema si todas las matrices que va a utilizar en este escenario son pequeñas, como en su ejemplo.

Si va a usar esto para blobs grandes (por ejemplo, almacenar archivos binarios grandes Mbs o incluso Gbs en un VARBINARY ) entonces probablemente sería mucho mejor usar soporte específico en SQL Server para leer / escribir subsecciones de tales blobs grandes. Cosas como READTEXT y UPDATETEXT , o en versiones actuales de SQL Server SUBSTRING .

Para obtener más información y ejemplos, consulte mi artículo de 2006 en .NET Magazine ( “BLOB + Stream = BlobStream” , en holandés, con el código fuente completo), o una traducción al inglés y generalización de esto en CodeProject por Peter de Jonghe. Ambos están vinculados desde mi weblog .

compruebe el enlace de esta imagen para conocer todos los pasos https://drive.google.com/open?id=0B0-Ll2y6vo_sQ29hYndnbGZVZms

PASO 1: Creé un campo de tipo varbinary en la tabla

PASO 2: Creé un procedimiento almacenado para aceptar un parámetro de tipo sql_variant

PASO 3: en mi página de asp.net, creé un parámetro fuente de datos sql del tipo de objeto

    UPLOAD DOCUMENT              

PASO 4: en mi código subyacente, trato de cargar FileBytes desde FileUpload Control a través de esta llamada a procedimiento almacenado utilizando un control de fuente de datos sql

  Dim filebytes As Object filebytes = FileUpload1.FileBytes() sqldsFileUploadConn.InsertParameters("DocBinaryForm").DefaultValue = filebytes.ToString Dim uploadstatus As Int16 = sqldsFileUploadConn.Insert() ' ... code continues ... ' 

Puede hacer algo como esto, una solución muy simple y eficiente: lo que hice fue utilizar un parámetro en lugar del marcador de posición básico, crear un objeto SqlParameter y utilizar otro método de ejecución existente. Por ejemplo, en su escenario:

 string sql = "INSERT INTO mssqltable (varbinarycolumn) VALUES (@img)"; SqlParameter param = new SqlParameter("img", arraytoinsert); //where img is your parameter name in the query ExecuteStoreCommand(sql, param); 

Esto debería funcionar como un encanto, siempre que tenga una conexión abierta de sql establecida.