2013-03-20 42 views
11

sto cercando di utilizzare un approccio a salvare le password che richiede l'utilizzo di array di byte come in questo postSalva array di byte in SQL Server

Quindi, quale tipo di dati Dovrei usare in SQL Server per salvare array di byte? e come posso passare e recuperare l'array di byte usando SqlCommand?

risposta

19

Se è andando sempre essere la stessa lunghezza, quindi binary(length) sarebbe adatto. Se la lunghezza varia, utilizzare varbinary(maxlength).

binary and varbinary.

E, come dice @ p.s.w.g, lo si passa dal codice ponendolo in un parametro appropriato.

+0

+1 Sì. Esattamente. –

+1

per me, avevo bisogno di 'varbinary (max)' –

3

Basta usare uno byte[] nello stesso modo in cui si farebbe con qualsiasi altro parametro, specificando SqlDbType.Binary come tipo di parametro. Qui un esempio in C#

// Generate your password hash some way 
byte[] passwordHash = new byte[] { 0x0, 0x1, 0x2 ... }; 

... 

command.Parameters.Add("@passwordHash", SqlDbType.Binary); 
command.Parameters["@passwordHash"].Value = passwordHash; 

O se preferite VB.NET

' Generate your password hash some way 
Dim passwordHash As Byte() = New Byte() { &H0, &H1, &H2 ... } 

... 

command.Parameters.Add("@passwordHash", SqlDbType.Binary) 
command.Parameters("@passwordHash").Value = passwordHash 
+0

è corretto utilizzare il tipo di dati SQL binario? come ho cercato su google qualcuno che ne diceva l'uso per file binari di grandi dimensioni come le immagini, sei d'accordo? – user2155873

+0

@ user2155873 Usa 'VARBINARY (MAX)' per file che sono piuttosto grandi o di lunghezza variabile. Per gli hash delle password usa 'BINARY (32)' (o comunque il tuo hash è lungo). –

+1

@ user2155873 - dato che si può dichiarare un 'binary (5)', che alloca memoria per 5 byte, diresti che era adatto solo per la memorizzazione di un file grande? –

0

Non so quanti anni abbia, ma consiglierei nvarchar (45) e Base64 i 32 byte in una stringa. Questo è il modo standard per salvare un hash. In alternativa è possibile eseguire nvarchar (64) e memorizzarlo come stringa esadecimale.