使用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控制。

让我知道如果我从数据库中检索图像的方式是正确的,如果它是正确的,我应该使用什么类型的控制,所以从数据库中检索到的图像可以显示在网页

使用c#从SQL Server数据库中保存和检索图像

我从数据库检索图像的方式正确吗?

我将使用以下代码代替(抱歉没有测试):
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,像你已经做的那样检索图像,然后直接写入响应流