C# 使用c从SQL Server数据库保存和检索图像#
我已经创建了一个网页,使用C# 使用c从SQL Server数据库保存和检索图像#,c#,asp.net,sql,image,sql-server-2005,C#,Asp.net,Sql,Image,Sql Server 2005,我已经创建了一个网页,使用Image控件显示图像。除了这个控件,我还有一些标签和输入框 下面是我用来将图像保存到数据库的代码 byte[] imageSize = new byte[FileUpload1.PostedFile.ContentLength]; HttpPostedFile uploadedImage = FileUpload1.PostedFile; uploadedImage.InputStream.Read(imageSize, 0, (int)FileUpload1.Pos
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
control
让我知道我从数据库检索图像的方法是否正确,如果正确,我应该使用什么类型的控件,以便从数据库检索的图像可以显示在网页上。首先,在您的示例中,您必须将流中的位置重置为0:
stream.Position=0代码>
其次,必须将映像写入web服务的本地缓存文件夹,该文件夹是web应用程序的一部分。图像控件可以有一个指向该图像地址的源引用(img.src)
或者。。。您可以创建一个AXD文件/HttpHandler。AXD文件是一个文件,与ASPX类似,但专门用于返回任何类型的数据,如图像
有关更多信息,请参阅:是我从数据库检索图像的方法吗?
我将使用以下代码(抱歉,未测试):
如何将映像绑定到asp.net映像控件?
我将创建一个HttpHandler,它获取并返回图像。然后将asp:Image上的ImageUrl属性绑定到HttpHandler的url。
如何做到这一点,您可以在这里的Dale Ragan的回答中看到:要检索图像并在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;
}
替代解决方案:
实现一个处理程序来为映像提供服务。看看这个界面
我们的想法是在页面中沿以下行写一个图像标签:
<asp:image runat="server" imageurl="~/Image.ashx?ID=xxx" />
然后,在处理程序实现中,从查询字符串中获取id,按照您已经执行的操作检索图像,然后直接写入响应流。我可以知道这是什么DropDownList 1.SelectedItem.ToString();通过这段代码,我将了解存储图像的文件名。我尝试了此解决方案,发现图像存储在以下路径的“C:\Program Files(x86)\Microsoft Visual Studio 9.0\Common7\IDE”中。无论您硬编码什么路径,静态图像都存储在该路径中。我试图用此路径设置Image1.imageUrl,但仍然看不到网页上的图像
<asp:image runat="server" imageurl="~/Image.ashx?ID=xxx" />