【问题标题】:Trying to convert a varbinary(MAX) value in SQL to byte[] and displaying in an asp image control尝试将 SQL 中的 varbinary(MAX) 值转换为 byte[] 并在 asp 图像控件中显示
【发布时间】:2015-05-20 13:56:29
【问题描述】:

最终目标是能够使用网络表单从数据库中选择一家公司及其所有详细信息,然后更新/创建新条目。所有这些都有效,除了 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);
            }

        }

The Error I receive is when a company is selected is "Value cannot be null. 参数名称:inArray"

我已经尝试了无数其他方法来做到这一点,但似乎都没有成功。 任何帮助深表感谢, 干杯!

【问题讨论】:

  • 你能验证 dr["Logo"] 的值吗?
  • 它是数据库中的一个列名,取自一个SqlCommand string sqlInstructionCstmID = "SELECT TOP(1) LetterTemplateCustomisationId, TemplateId, Logo, SchemeCode, Version, Comment FROM LetterTemplateCustomisation WHERE SchemeCode ='" + schemeCode +"'";
  • 至少,由于错误提到了一个名为 inArray 的参数,您可能需要找到一段出现相同名称的代码,并通过 editing 您的问题来显示这些位(单行代码很少对问题有帮助,因为您不太可能将问题隔离到导致问题的单行 - 如果您有,您可能不需要提出问题)
  • "inArray" 没有出现在我的代码中的任何位置。抱歉缺少上下文,已编辑。
  • 在你的代码中仍然看不到它。

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    以上代码正在运行。我们必须将图像插入/更新到列 Logo。 例如:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-08
      • 2012-08-26
      • 1970-01-01
      • 2015-08-03
      • 2015-08-06
      • 2016-04-06
      • 1970-01-01
      相关资源
      最近更新 更多