Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用c从SQL Server数据库保存和检索图像#_C#_Asp.net_Sql_Image_Sql Server 2005 - Fatal编程技术网

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" />