Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.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# 从数据库检索图像并在ASP.NET上显示,而不使用httphandler_C#_Asp.net_Sql - Fatal编程技术网

C# 从数据库检索图像并在ASP.NET上显示,而不使用httphandler

C# 从数据库检索图像并在ASP.NET上显示,而不使用httphandler,c#,asp.net,sql,C#,Asp.net,Sql,我有一个ASP.NET网站,我想输入EmployeeName,上传EmployeePhoto,然后检索员工信息并在网站上显示EmployeePhoto 我创建了一个带有EmployeePhoto类型“image”的SQL表 我使用此代码插入照片(工作正常) 然而,当我想将我在SQL中插入的照片加载到网站时,我得到这个Inputstream不存在错误 加载照片代码和错误 我不想使用httphandler解决方案 编辑:我还没有正确的答案:( 多谢各位 cnn.Open()

我有一个ASP.NET网站,我想输入EmployeeName,上传EmployeePhoto,然后检索员工信息并在网站上显示EmployeePhoto

我创建了一个带有EmployeePhoto类型“image”的SQL表

我使用此代码插入照片(工作正常)

然而,当我想将我在SQL中插入的照片加载到网站时,我得到这个Inputstream不存在错误

加载照片代码和错误

我不想使用httphandler解决方案

编辑:我还没有正确的答案:(

多谢各位

            cnn.Open();
            SqlCommand cmd = new SqlCommand("SELECT EmployeeFirstName,EmployeeLastName,EmployeePhoto FROM Employees WHERE EmployeeID = @myvalue", cnn);
            cmd.Parameters.AddWithValue("@myvalue", (ListBox1.SelectedValue));
            SqlDataReader dr = cmd.ExecuteReader();
            if (dr.HasRows)
            {
                while (dr.Read())
                {
                    TextBox1.Text = dr.GetString(0);
                    TextBox2.Text = dr.GetString(1);


                    byte[] imagedata = (byte[])dr[2];
                    InputStream.Read(imagedata, 0, (byte[])dr[2]);
                    Image Image1 = Image.FromStream(imagedata);

                }
            }
            cnn.Close();
替换

                byte[] imagedata = (byte[])dr[2];
                InputStream.Read(imagedata, 0, (byte[])dr[2]);
                Image Image1 = Image.FromStream(imagedata);

由于找不到您正在使用的
InputStream
对象,似乎发生了错误。请通过创建新的MemoryStream对象绕过此问题

另外,您正在将一个二进制数组传递到
Image.FromStream
中,我认为这不会被正确接受

另外,使用
图像
对象可能对您的解决方案没有帮助,因为它与
图像
web控件不同

详情见下文:


这是因为没有名为InputStream的对象

请尝试以下方法:

byte[] imagedata = (byte[])dr[2];
Image Image1 = Image.FromStream(new MemoryStream(imagedata));

这将把
字节[]
放入内存流,然后允许您使用Image.FromStream();

我相信这可能会起作用:

byte[] bitMapData = dr[2] as byte[] ?? null;

        if (bitMapData != null)
        {
            using (MemoryStream stream = new MemoryStream(bitMapData))
            {
                System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(stream);
            }
        }

按照HTML的设计方式,您应该使用某种处理程序,因为HTML中的
img
标记引用外部资源(例如
src
标记)。在最长的时间内,没有一种方法将图像包含在从服务器返回的HTML中

话虽如此,情况已经发生了变化,现在这是可能的。您可以使用特殊格式的
src
属性对图像进行base-64编码并将其包含在标记中:

<img src="data:<MIMETYPE>;base64,<BASE64_ENCODED_IMAGE>">
;base64,”>
并不是所有浏览器都支持这一点,所以要小心

此外,这种方法的一大缺点是,浏览器不会缓存图像,因此每次请求此页面时,服务器都会产生额外的开销以生成此Base64值,而如果您有URL,浏览器可以基于URL缓存图像,而不必在每次请求时都从服务器获取图像


要获取Base64字符串,请使用静态方法
System.Convert.ToBase64String(byte[])

“我不想使用httphandler解决方案":为什么?您想显示存储在DB中的图片?处理程序是唯一的解决方案。我认为这是重复的,因为要求是相同的。请使用检查您的
。您必须了解有多个
图像
类,正如@Nunners在其回答中所说的below@SteveB对不起,我不明白你的意思。你怎么能理解我修复了Nunners answer中的错误??阅读有关.Net名称空间的信息。System.Drawing.Image与System.Web.UI.Controls.Images不同。我收到此错误:(我收到这个错误,op希望在web上显示图片。此代码不显示如何显示。要么更新代码以满足要求,要么解释op为什么需要处理程序。查看他的代码,不清楚他使用的是什么图像对象。我引用的是位图对象,因为他的代码有以下内容:
image Image1=Image.FromStream(imagedata);
他当时要求的内容已被涵盖,但照片并未出现在网站上:(还有,,所以“Image1”在代码中的任何位置都不存在,因此如何在那里显示它?op希望在web上显示图片。此代码不显示如何显示。请更新代码以满足要求,或者解释op为什么需要处理程序。您不能将位图直接分配给asp.net图像控件。可以通过多种方式进行设置n解决这个问题(将映像写入磁盘并设置src,或者创建一个通过Response.BinaryWrite(…)返回数据的页面并将src设置为页面)
<img src="data:<MIMETYPE>;base64,<BASE64_ENCODED_IMAGE>">