使用c#从SQL Server数据库中保存和检索图像
本文关键字:保存 检索 图像 数据库 SQL Server 使用 | 更新日期: 2023-09-27 18:11:16
我创建了一个网页,我使用Image
控件来显示图像。除了这个控件,我还有一些标签和输入框
byte[] imageSize = new byte[FileUpload1.PostedFile.ContentLength];
HttpPostedFile uploadedImage = FileUpload1.PostedFile;
uploadedImage.InputStream.Read(imageSize, 0, (int)FileUpload1.PostedFile.ContentLength);
SqlParameter UploadedImage = new SqlParameter("@image", SqlDbType.Image, imageSize.Length);
UploadedImage.Value = imageSize;
string sql = "insert into imageDB(Image) values (@image)";
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
cmd.Parameters.Add(UploadedImage);
cmd.ExecuteNonQuery();
}
,下面是我用来从数据库
检索图像的代码byte[] rawImg = (byte[])rdr["image"];
MemoryStream Stream = new MemoryStream();
Stream.Write(rawImg, 0, rawImg.Length);
Bitmap Display_Picture = new Bitmap(Stream);
//after this no idea how to proceed
我读了一些链接,都建议我们不能将这个字节信息设置为Image
控制。
让我知道如果我从数据库中检索图像的方式是正确的,如果它是正确的,我应该使用什么类型的控制,所以从数据库中检索到的图像可以显示在网页
我从数据库检索图像的方式正确吗?
我将使用以下代码代替(抱歉没有测试):byte[] imageBytes = Convert.FromBase64String(rdr["image"]);
MemoryStream stream = new MemoryStream(imageBytes);
Image image = Image.FromStream(stream);
如何将图像绑定到asp.net图像控件?
我将创建一个HttpHandler获取并返回图像。然后将asp:Image的ImageUrl属性绑定到HttpHandler的url。你可以在Dale Ragan的回答中看到如何做到这一点:如何将MemoryStream绑定到asp:图像控制?
首先,在您的示例中,您必须将流中的位置重置为0:Stream.Position = 0;
第二,你必须将你的图像写入你的web服务的本地缓存文件夹,这是你的web应用程序的一部分。您的图像控件可以有一个指向该图像地址的源引用(img.src)。
还是……你可以创建一个axd文件/HttpHandler。AXD文件是一个文件,就像ASPX一样,但是专门用于返回任何类型的数据,比如图像。
更多信息请参见:http://blog.kurtschindler.net/post/using-httphandlers-to-serve-image-files
要检索图像,并在asp.net图像控件上显示,您可以
cn.Open();
SqlCommand cm = new SqlCommand("select * from ImageCollection where img_id='" + DropDownList1.SelectedItem.ToString() + "'", cn);
SqlDataAdapter da = new SqlDataAdapter(cm);
SqlDataReader dr = cm.ExecuteReader();
try
{
if (dr.Read())
{
string image1 = Convert.ToString(DateTime.Now.ToFileTime());
FileStream fs1 = new FileStream(image1, FileMode.CreateNew, FileAccess.Write);
byte[] bimage1 = (byte[])dr["passport_photo"];
fs1.Write(bimage1, 0, bimage1.Length - 1);
fs1.Flush();
Image1.ImageUrl = "~/images/"+DropDownList1.SelectedItem.ToString();
}
dr.Close();
cn.Close();
}
catch (Exception ex)
{
throw ex;
}
替代解决方案:
实现一个处理程序来提供图像。看一下System.Web.IHttpHandler接口。
这个想法是在你的页面上写一个图像标签,沿着以下的行:<asp:image runat="server" imageurl="~/Image.ashx?ID=xxx" />
然后在你的处理程序实现中,从querystring中获取id,像你已经做的那样检索图像,然后直接写入响应流