2010-10-30 31 views
35

Làm cách nào để lưu mảng byte [] vào cơ sở dữ liệu SQL Server? Byte này [] chứa giá trị HashAlgorithm.Lưu byte [] vào cơ sở dữ liệu SQL Server từ C#

Dữ liệu là cần thiết một lần nữa để sử dụng sau này. Vì vậy, chuyển đổi nó và không nhận được nó trở lại trong tình trạng ban đầu của nó, không phải là những gì tôi muốn.

Cảm ơn trước!

Trả lời

56

Bạn sẽ có thể viết một cái gì đó như thế này:

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

Sử dụng LINQ-to-SQL, bạn muốn viết một cái gì đó như thế này:

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

    item.ByteContent = (your byte content here); 

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

Đó sẽ chèn byte[] của bạn vào một cột Content loại VARBINARY trong bảng SQL Server của bạn dưới dạng luồng byte, mà bạn có thể đọc b ack 1: 1 lại sau.

+1

Câu trả lời hay. Tuy nhiên, dựa trên tuyên bố rằng giá trị là một băm, có thể nó sẽ có độ dài không đổi. Nếu vậy, hãy xem xét sử dụng nhị phân có độ dài thay vì varbinary. –

+2

@Sean Reilly: true - nhưng các thuật toán băm khác nhau cũng tạo ra các băm dài khác nhau, vì vậy bạn có thể muốn sử dụng VARBINARY với độ dài tối đa phù hợp để chứa tất cả các biến thể –

+0

@marc_s tôi sẽ sử dụng LINQ. tôi có phải làm SqlDbType.VarBinary không? – Yustme

2

Varbinary hoặc CHAR - với giá trị được chuyển đổi thành hex. Tôi làm điều đó khá thường xuyên với các giá trị băm vì nó cho phép tôi SEE và COMPARE chúng một cách dễ dàng (trên rintouts, trong quá trình phát triển), và overhead là tối thiểu.

Các vấn đề liên quan