我有这个代码将数据库中的图片插入到我的ASP.NET窗体上的ImageControl中:
strConnString = "server=" + Server + ";database=" + DataBase + ";UID=" + UID + ";password=" + PASS + ";";
SqlConnection MyConnection = new SqlConnection(strConnString);
SqlCommand MyCommand = new SqlCommand("SELECT Pic FROM MEN WHERE ID=5", MyConnection);
MyConnection.Open();
SqlDataReader MyReader = MyCommand.ExecuteReader();
if (MyReader.Read())
{
byte[] m_MyImage = (byte[])MyReader["Pic"];
Response.BinaryWrite(m_MyImage);
}
我在表格上有ImageControl
:
<asp:Image Width="88" Height="100" Runat="server" ID="m_Image" NAME="m_Image" />
但是当我运行代码时,我会在屏幕上看到图片大而不是ImageControl
。
我也把它放在form_load中:
m_Image.ImageUrl = "MyPhoneBook.aspx?m_Image";
my control is: m_Image
my control ID is: m_Image
my namespace is MyPhoneBook
但仍然无法正常工作
我做错了什么?
由于
答案 0 :(得分:1)
您正在将图像数据直接写入响应流:
Response.BinaryWrite(m_MyImage);
这导致浏览器只获取图像,而不是任何HTML。
此外,图像控件采用URL到图像,而不是二进制内容,因此这种方法不起作用。
要执行我认为您想要实现的目标(将数据从数据库获取到页面而不执行任何磁盘IO),您可以执行以下操作:
ImageUrl
设置为此页面。您可以通过将图像ID传递给查询字符串上的图像页面/处理程序(类似image.aspx?img_id=1
)
答案 1 :(得分:0)
您如何引用页面上的图像?提供的图像控制标记似乎没有任何类型的图像引用,并且代码提供它只是将图像直接写入响应。什么是最终的HTML?
如果我根据这段代码猜测,我会说你用二进制图像响应来破坏HTML响应,所以你只看到后者。这两者需要分成他们自己的请求/回复。
答案 2 :(得分:0)
您需要创建一个单独的ASHX处理程序,以现在的方式呈现图像,然后将<asp:Image>
的URL设置为指向该ASHX。