2010-10-30 12 views
35

Jak zapisać tablicę bajtów [] w bazie danych programu SQL Server? Ten bajt [] zawiera wartość HashAlgorithm.Zapisz bajt [] w bazie danych programu SQL Server z C#

Dane są potrzebne ponownie do późniejszego wykorzystania. Więc nie jest to, czego chcę, to przekształcenie go i NIE przywrócenie go do pierwotnego stanu.

Z góry dziękuję!

Odpowiedz

56

Powinieneś być w stanie napisać coś takiego:

string queryStmt = "INSERT INTO dbo.YourTable(Content) VALUES(@Content)"; 

using(SqlConnection _con = new SqlConnection(--your-connection-string-here--)) 
using(SqlCommand _cmd = new SqlCommand(queryStmt, _con)) 
{ 
    SqlParameter param = _cmd.Parameters.Add("@Content", SqlDbType.VarBinary); 
    param.Value = YourByteArrayVariableHere; 

    _con.Open(); 
    _cmd.ExecuteNonQuery(); 
    _con.Close(); 
} 

użyciu LINQ-SQL, można by napisać coś takiego:

using(YourDataContextHere ctx = new YourDataContextHere()) 
{ 
    SomeClassOfYours item = new SomeClassOfYours(); 

    item.ByteContent = (your byte content here); 

    ctx.SomeClassOfYourses.InsertOnSubmit(item); 
    ctx.SubmitChanges(); 
} 

Że wstawi twój byte[] do kolumny Content typu VARBINARY w twojej tabeli SQL Server jako strumień bajtów, który możesz odczytać b ack 1: 1 ponownie później.

+1

Dobra odpowiedź. Jednak na podstawie stwierdzenia, że ​​wartość jest hash, możliwe, że będzie ona miała stałą długość. Jeśli tak, rozważ użycie binarne o tej długości zamiast varbinary. –

+2

@Sean Reilly: true - ale różne algorytmy skrótu również dają różne skróty długości, więc możesz chcieć użyć VARBINARA o odpowiedniej maksymalnej długości, aby pomieścić wszystkie warianty –

+0

@ marc_s Będę używał linq. czy muszę zrobić SqlDbType.VarBinary? – Yustme

2

Varbinary lub CHAR - z wartością skonwertowaną na heks. Robię to dość często za pomocą wartości mieszania, ponieważ pozwala mi to ZOBACZYĆ i PORÓWNOWAĆ je w łatwy sposób (na łamach, podczas tworzenia), a narzut jest minimalny.

Powiązane problemy