【问题标题】:Read Image from SQL Server VarBinary(Max)从 SQL Server VarBinary(Max) 读取图像
【发布时间】:2015-06-11 10:29:16
【问题描述】:

我有一个 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

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

但我不知道如何实现这一点。

【问题讨论】:

    标签: c# asp.net image


    【解决方案1】:

    您可以使用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

    【讨论】:

    • 谢谢!我应该独自面对这个:)!但是我在哪里显示我的图像呢?在控件中还是?
    • 根据您的要求显示它。例如,您可以使用<asp:Image /><asp:GridView />,在网格中您可以使用<asp:ImageField />,您可以自行选择。
    • 现在正在努力。我会及时向大家发布 :)!提前致谢
    • 不要真的出错。只是无法弄清楚如何使用您的代码。我没有足够的声望和你聊天.. 有什么方法可以联系你吗? Skype 之类的?
    • 也不要使用AddWithValue()
    【解决方案2】:

    扩展 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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-07-26
      • 1970-01-01
      • 1970-01-01
      • 2018-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-08
      • 2019-04-30
      相关资源
      最近更新 更多