从SQL Server VarBinary读取图像(最大)

时间:2015-06-11 10:29:16

标签: c# asp.net image

我有一个SQL Server数据库。我在那里存储了一个varbinary(max)的图像。我按以下方式插入图像:

string consString = ConfigurationManager.ConnectionStrings["connection"].ConnectionString;
            SqlConnection con = new SqlConnection(consString);
            con.Open();

            String filePath = fuImage.PostedFile.FileName;
            String naam = Path.GetFileName(filePath);
            String extension = Path.GetExtension(naam);

            Stream stream = fuImage.PostedFile.InputStream;
            BinaryReader br = new BinaryReader(stream);
            Byte[] imgByte = br.ReadBytes((Int32)stream.Length);


            SqlCommand cmd = new SqlCommand();
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "spAddImage";
            cmd.Parameters.AddWithValue("@FOTO", imgByte);
            cmd.Parameters.AddWithValue("@ARTIEST", ddlArtiest.SelectedValue);
            cmd.Connection = con;
            cmd.ExecuteNonQuery();
            con.Close();

现在,图像在数据库中显示如下: 它存储为varbinary。

http://puu.sh/ikF83/6a03b52520.png< --- database

现在我想在我插入的asp.net页面上显示我的图像。

但我不知道如何才能做到这一点。

2 个答案:

答案 0 :(得分:0)

您可以使用SqlDataReader来检查结果并获取所需内容

var reader = cmd.ExecuteReader();
while (reader.Read())
{
  byte[] myImage = (byte[])reader["MyImageColumn"];
}

这是我的头脑,所以根据需要进行调整。但它应该给你基本的想法。

此外,强烈建议使用using块,因为它可以确保正确放置对象。

因此您可以将代码更改为

using(var connection = new SqlConnection(connectionString))
{
  //Your command 
  connection.Open();

  //Datareader here

}//Object disposed here

参考SqlDataReader

参考using block

答案 1 :(得分:0)

扩展Izzy提供的答案,下面是我们如何实现相同的。

public HttpResponseMessage RenderImage(RenderRequest renderRequest, HttpRequestMessage request)
{
    var httpResponse = new HttpResponseMessage();

    try
    {
        var reader = cmd.ExecuteReader();
        while (reader.Read())
        {
            byte[] imagebytes = (byte[])reader["MyImageColumn"];
        }

        return httpResponse = request.CreateResponse<byte[]>(HttpStatusCode.OK, imagebytes, new ImageMediaFormatter("image/png"));
    }
    catch ()
    {
        throw;
    }
}