Tôi gặp lỗi này khi tôi đang cố gắng lưu hình ảnh của mình vào cơ sở dữ liệu.Làm thế nào để lưu hình ảnh vào cơ sở dữ liệu?
Tôi đang làm gì sai?
Dưới đây là thiết kế của bàn của tôi:
Tôi đang sử dụng Microsoft Server 2008.
Tôi gặp lỗi này khi tôi đang cố gắng lưu hình ảnh của mình vào cơ sở dữ liệu.Làm thế nào để lưu hình ảnh vào cơ sở dữ liệu?
Tôi đang làm gì sai?
Dưới đây là thiết kế của bàn của tôi:
Tôi đang sử dụng Microsoft Server 2008.
Bạn có hai vấn đề:
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.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));
Một tìm kiếm google đơn giản xuất hiện để mang lại giải pháp cho một này: http://www.eggheadcafe.com/community/aspnet/10/10081215/inserting-image-in-sql-server.aspx
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ố.
+1 để có tài liệu tốt. –
đó là nguyên nhân của lỗi? – yonan2236
tài liệu tuyệt vời mất thêm – Adrian