ASP.NET C#从SQL Server数据库获取、检索和显示图像

ASP.NET C#从SQL Server数据库获取、检索和显示图像,c#,asp.net,sql-server,C#,Asp.net,Sql Server,我想从SQL Server数据库中检索一个图像,并在image工具中显示 我有这个密码 <asp:Image ID="Image1" runat="server" CssClass="style2" Height="166px" Width="488px" /> SqlConnection connect = null; string connectstring = "Data Source=.\\SQLEXPRESS;Initial Catalog=teste;Integra

我想从SQL Server数据库中检索一个图像,并在
image
工具中显示

我有这个密码

<asp:Image ID="Image1" runat="server" CssClass="style2" Height="166px" Width="488px" />


SqlConnection connect = null;

string connectstring = "Data Source=.\\SQLEXPRESS;Initial Catalog=teste;Integrated Security=true;pooling=false";
connect = new SqlConnection(connectstring);
connect.Open();

string Scmd = "SELECT id, imagem where id = 2";
SqlCommand cmd = new SqlCommand(Scmd, connect);

SqlDataReader reader = cmd.ExecuteReader();

reader.Read();

if (reader.HasRows)
{
    Label1.Text = reader[0].ToString();                        
    byte[] imagem = (byte[])(reader[1]);

    MemoryStream ms = new MemoryStream(imagem);

    Image1.ImageUrl = ms.FromStream(ms); //i tried this
}
因为我犯了一个错误

有人能帮我吗?我唯一的问题是显示图像


请帮助,谢谢。

您可以从字节数组中生成
base64string
,并将其用作内联图像源

  • 转换为base64string
  • 使用此字符串作为内联图像,如下所示
    Image1.ImageUrl=String.Format(“数据:image/jpg;base64,{0}”,base64String)

    假设:图像保存为
    jpg

    如果不同,则在步骤2中更改行


    免责声明:
    Base64string
    因为图像适用于小尺寸图像,但如果图像较大,则生成的字符串将具有大尺寸字符串。优点是,浏览器不必为每个图像多次请求(如果您将其实现为
    image.src=”http://handler-to-image“
    )。

    您可以从字节数组中生成
    base64string
    ,并将其用作内联图像源

  • 转换为base64string
  • 使用此字符串作为内联图像,如下所示
    Image1.ImageUrl=String.Format(“数据:image/jpg;base64,{0}”,base64String)

    假设:图像保存为
    jpg

    如果不同,则在步骤2中更改行


    免责声明:
    Base64string
    因为图像适用于小尺寸图像,但如果图像较大,则生成的字符串将具有大尺寸字符串。优点是,浏览器不必为每个图像多次请求(如果您将其实现为
    image.src=”http://handler-to-image“
    )。

    推荐的方法是存储图像的路径,这样,一旦从数据库中检索到图像,您就可以创建图像的url。您应该包装您的
    阅读器
    ,您的
    MemoryStream
    、您的
    cmd
    和您的
    连接
    中使用
    块。无法回答此问题,因为您没有显示Image1是如何声明的。这是一个web应用程序吗?如果是这样,那么您将需要一个url。当访问该URL时,您可能还需要一个服务器来从数据库传递数据。或者您可以将图像存储为文件,并使用标准url(无需任何服务)……或者编写ashx处理程序从数据库中获取图像并将其作为二进制流返回。我非常确定保存图片路径不是一个好主意,但可以:)建议的方法是存储图像的路径,以便从数据库中检索后,您可以使用
    块在
    中构建图像的url。您应该在
    中包装您的
    读取器
    、您的
    内存流
    、您的
    cmd
    和您的
    连接。由于您没有显示Image1是如何声明的,因此无法回答此问题。这是一个web应用程序吗?如果是这样,那么您将需要一个url。当访问该URL时,您可能还需要一个服务器来从数据库传递数据。或者您可以将图像存储为文件并使用标准url(无需任何服务)……或者编写ashx处理程序从数据库中获取图像并将其作为二进制流返回。我非常确定保存图片路径不是一个好主意,但可以:)当然,这几乎使图像的下载大小增加了一倍。这个解决方案揭示了一个可怕的设计。这不会扩展。当然,这只是图像下载大小的两倍。这个解决方案揭示了一个可怕的设计。这不会扩展。
    
    Image1.ImageUrl = ms.FromStream(ms);
    
    byte[] imagem = (byte[])(reader[1]);
    string base64String = Convert.ToBase64String(imagem) ;