试图将SQL中的可变二进制(MAX)值转换为字节[]并在asp图像控件中显示
本文关键字:字节 转换 asp 显示 控件 图像 并在 SQL MAX 二进制 | 更新日期: 2023-09-27 17:49:55
最终目标是能够使用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"
我试过无数种其他方法,但似乎没有一种能奏效。任何帮助都是非常感激的。干杯!
根据MSDN, inArray
是Convert.ToBase64String(byte[])
的参数名。因此,temp.Logo
必须为null
图片。Src = "data:image/jpeg;base64," + Convert.ToBase64String((byte[])dr["Logo"]);
上面的代码是工作的。我们必须插入/更新图像的列标志。例:
update <table>
set Logo= (SELECT BulkColumn
FROM Openrowset( Bulk 'LogoPath...' , Single_Blob) as img)