2011-01-31 33 views

Trả lời

15

Bạn có hai vấn đề:

  1. The (dễ hiểu) nhầm lẫn về kiểu dữ liệu Image trong SQL Server. Đây thực sự chỉ là một đối tượng nhị phân lớn (một BLOB trong cách nói chung). Để lưu hình ảnh (hoặc bất kỳ thứ gì khác) trong cột này, trước tiên bạn phải chuyển đổi hình ảnh đó thành một byte[], sau đó lưu trữ mảng byte đó trong cột.
  2. Bạn đang sử dụng loại dữ liệu Image không được dùng nữa. Nếu bạn có quyền kiểm soát thiết kế này, hãy thay đổi nó để sử dụng varbinary(MAX). Trong khi loại Image vẫn còn trong SQL Server 2008 R2, nó sẽ bị loại bỏ khỏi các phiên bản trong tương lai tại một số điểm.

Để có được một byte[] đại diện cho hình ảnh, hãy thử này ra:

byte[] data; 

using(System.IO.MemoryStream stream = new System.IO.MemoryStream()) 
{ 
    image.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp); 
    data = stream.ToArray(); 
} 

Biến data bây giờ chứa dữ liệu nhị phân của hình ảnh, và bạn có thể sử dụng như giá trị tham số của bạn. Có các bước bổ sung mà bạn có thể thực hiện ở đây (ví dụ như lưu nó ở định dạng khác như JPEG), nhưng điều này ít nhất cũng giúp bạn bắt đầu.

Khi truy xuất dữ liệu, dữ liệu cũng sẽ trở lại dưới dạng byte[], vì vậy bạn sẽ cần phải biến lại thành hình ảnh.

byte[] data = ...; 

Image image = Image.FromStream(new System.IO.MemoryStream(data)); 
+1

Tôi sẽ thử giải pháp của bạn thưa ông, trong một thời gian ... – yonan2236

+0

hehe, tôi không thể nhận được nó – yonan2236

+1

@ yonan2236: Bạn có thể cụ thể hơn ...? –

0

Các lỗi được khá rõ ràng, không có chuyển đổi từ một đối tượng Image GDI để một mảng byte (đó là những gì Kiểu cột dữ liệu SQL Server Hình ảnh thực sự là). Bạn cần chuyển đổi đối tượng Hình ảnh của bạn thành một mảng byte trước khi thêm nó làm tham số.

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