无法将'string'类型转换为'byte []'?

时间:2014-10-17 06:25:16

标签: c# image binary

您好我必须在下拉列表中选择学生ID时在图像框上显示学生图像。图像以db2中的二进制格式存储。我想在不使用通用http处理程序的情况下显示图像。使用下面给出的代码生成一个错误。错误是“无法将类型字符串转换为byte []”。请帮帮我。

代码:

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
    DataSet1TableAdapters.TextBoxTableTableAdapter tx;
    tx = new DataSet1TableAdapters.TextBoxTableTableAdapter();
    DataTable dt = new DataTable();
    dt = tx.GetstudData(int.Parse(DropDownList1.SelectedValue));
    foreach (DataRow row in dt.Rows)
    {
        TextBox1.Text = (row["FirstName"].ToString());
        TextBox2.Text = (row["SecondName"].ToString());  
        byte[] barrImg = (byte[])(row["StudImage"].ToString());
        string base64String = Convert.ToBase64String(barrImg , 0, barrImg.Length);
        Image1.ImageUrl = "data:image/png;base64," + base64String;
    }
}

SQL查询:

SELECT FirstName, SecondName, StudentImage FROM TextBoxTable WHERE (Id = @Id)

Aspx来源:

<div>
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<asp:Image ID="Image1" runat="server" />
</div>

数据库:

enter image description here

1 个答案:

答案 0 :(得分:5)

是的,问题在于:

byte[] barrImg = (byte[])(row["StudImage"].ToString());

您在ToString()上致电row["StudImage"]。这将导致String。然后您将该字符串转换为byte[] - 但这不起作用,因为没有这样的转换。 (你期望它做什么?)

不清楚为什么你要调用ToString - 如果值是二进制数据,我希望这可行:

byte[] barrImg = (byte[]) row["StudImage"];

请注意,您不需要向Convert.ToBase64String提供三个参数 - 您可以使用:

string base64 = Convert.ToBase64String(barrImg);

我个人鼓励您也为之前的陈述使用强制转换 - 如果值不是字符串,则可能代表一个严重的问题:

TextBox1.Text = (string) row["FirstName"];
TextBox2.Text = (string) row["SecondName"];  

另一方面,您的架构允许空值 - 目前您根本没有考虑这些值。如果值实际 DbNull.Value,则上面的所有强制转换都会抛出异常。作为一个单独的问题,您应该考虑如何处理它。