SQL <binary data =“”>在ASP.NET页面上显示的图像类型</binary>

时间:2011-02-20 19:55:07

标签: c# .net sql webforms

我有一个小应用程序用于拍摄网络摄像头图像并将此图像作为二进制数据放入sql数据库,并且工作正常。但是我有一个单独的.net网页的问题,我想通过最简单的方式在页面上显示图像。

这里有一些示例代码,但它并不多,因为我正在尝试从头顶开始钻头,如果我在任何接近解决方案的地方都没有线索。

public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        ConnectionStringSettings settings = ConfigurationManager.ConnectionStrings["ConnectionString"];
        SqlConnection con = new SqlConnection(settings.ConnectionString);

        SqlCommand MyCmd;

        MyCmd = new SqlCommand("SELECT image FROM contractors WHERE number like @number", con);
        MyCmd.Parameters.AddWithValue("@number", "1");
        Image1 = MyCmd.ExecuteScalar();
    }

对此我收到错误消息

  

错误1无法将类型'object'隐式转换为'System.Web.UI.WebControls.Image'。存在显式转换(您是否错过了演员?)

但是我不知道我是否沿着正确的路线走,所以我在这里发布的不仅仅是关于这一点,而是关于我整体想做的事情。

3 个答案:

答案 0 :(得分:5)

您将查询结果直接分配给Image变量 - 这将永远不会有效,因为Image控件需要 URL 才能显示图像在ASP.NET页面上。

最常见的方法是编写一个Http Handler,它将返回图像数据并使用处理程序URL作为ImageUrl

请参阅有关Http处理程序的this MSDN页面,以及this如何实现所需内容的问题。

答案 1 :(得分:2)

使用base64 encoded data uri或使用将使用Response.BinaryWrite返回图像数据的网址。在您的示例中,Image1变量需要是一个字节数组,然后您可以Response.BinaryWrite使用正确的标头集。

答案 2 :(得分:1)

<强> 1
阅读Oded关于如何将图像导入图像控件的答案

2

您无法使用ExecuteScalar获取图像数据ExecuteReader

var reader = MyCmd.ExecuteReader();
if (reader.NextResult())
{
    byte[] imgData = (byte[])reader["image"];
}