尝试将SQL中的varbinary(MAX)值转换为byte []并在asp图像控件中显示

时间:2015-05-20 13:56:29

标签: c# sql asp.net sql-server

最终目标是能够使用webform从数据库中选择公司及其所有详细信息,然后更新/创建新条目。所有这些都有效,除了Logo

Logo作为varbinary(MAX)存储在SQL数据库中,它已被拉入C#并转换为byte [],以便使用asp图像控制器显示它。

前端

<img src="" runat="server" id ="image" />

使用SqlDataReader从数据库中提取徽标

        public TemplateData(SqlDataReader dr)
    {
        initialiseData();
        if (dr.HasRows)
        {

            byte[] Logo = (byte[])dr["Logo"];

            //Logo = dr["Logo"].ToString();
            TemplateId = dr["TemplateId"].ToString();
            Comment = dr["Comment"].ToString();
            SchemeCode = dr["SchemeCode"].ToString();
            Version = dr["Version"].ToString();
        }
    }

背后的代码

        protected void ddSchemeCode_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (ddSchemeCode.SelectedIndex > 0)
        {
            // Existing Data to load from database
            TemplateData temp = DataClass.ReturnData(ddSchemeCode.SelectedItem.Text);
            if (temp != null)
            {
                txtVersion.Text = temp.Version;
                txtComment.Text = temp.Comment;
                txtSchemeCode.Text = temp.SchemeCode;
                txtTemplateId.Text = temp.TemplateId;
                image.Src = "data:image/jpeg;base64," + Convert.ToBase64String(temp.Logo);
            }

        }

我收到的错误是选择公司时“值不能为空”。 参数名称:inArray“

我已经尝试了其他方法,其中没有一个似乎可以做到这一点。 任何帮助深表感谢, 干杯!

2 个答案:

答案 0 :(得分:2)

根据MSDNinArrayConvert.ToBase64String(byte[])的参数名称。因此,temp.Logo必须为null

答案 1 :(得分:0)

image.Src = "data:image/jpeg;base64," + Convert.ToBase64String((byte[])dr["Logo"]);

Above code is working. We have to insert/update image to column Logo. Ex:

update <table> 
    set Logo= (SELECT BulkColumn 
    FROM Openrowset( Bulk 'LogoPath...' , Single_Blob) as img)