2011-09-27 23 views

Respuesta

3
SqlConnection conn = new SqlConnection(yourConnectionString); 
    SqlCommand cmd = new SqlCommand("select col from yourtable", conn); 
    SqlDataReader reader = cmd.ExecuteReader(); 
    if (reader.HasRows) 
    { 
     byte[] bytes = (byte[])reader[0]; 
    } 
    reader.Close(); 
    conn.Close(); 
+0

Gracias, pero quiero cortar y pegar el texto de la ventana de SQL Server Management Studio. No quiero volver a consultar la base de datos. – Slaggg

+2

SSMS es una aplicación cliente diseñada para mostrar datos formateados. No tendría una interfaz para acceder a los datos binarios subyacentes devueltos desde la base de datos. Para eso es la interfaz programática descrita en esta respuesta. SSMS es la herramienta incorrecta para esto. –

+0

@ChrisSmith No estoy de acuerdo: el contenido textual que se muestra en la representación textual SSMS de los campos de datos binarios está claramente relacionado con los datos reales almacenados en el campo. – Slaggg

24

OK, por lo que desea copiar y pegar el valor mostrado en SSMS para una columna varbinary (por ejemplo, "0x6100730064006600"), y obtener el byte [] de ella en C#?

Eso es bastante fácil: la parte que sigue a 0x solo tiene valores hexadecimales (2 caracteres cada uno). Por lo tanto, se toma cada par, convertirlo a un número que especifica una base de 16 (hex), y añadirlo a una lista, así:

string stringFromSQL = "0x6100730064006600"; 
List<byte> byteList = new List<byte>(); 

string hexPart = stringFromSQL.Substring(2); 
for (int i = 0; i < hexPart.Length/2; i++) 
{ 
    string hexNumber = hexPart.Substring(i * 2, 2); 
    byteList.Add((byte)Convert.ToInt32(hexNumber, 16)); 
} 

byte [] original = byteList.ToArray(); 

Renuncia - bastante poco fiable y el código unoptimal, sólo hackeado juntos con fines de demostración (aunque debería funcionar).

+0

¿Por qué su código es poco óptimo? Parece bastante bien en mi opinión :) –

+1

@ Żubrówka - En términos de legibilidad, no es tan malo; en términos de rendimiento, sin embargo, podríamos simplemente usar una matriz, ya que sabemos exactamente qué tan grande tendrá que ser. Utilizar una estructura de datos diferente y luego .ToArray() - me parece un poco flojo, pero lo hice principalmente por claridad y legibilidad :) –

+2

me hizo el día. Muchas gracias – rank1

Cuestiones relacionadas