无法将类型为'System.Byte []'的对象强制转换为'System.String []'

时间:2013-10-14 11:11:22

标签: c# .net winforms reportviewer

您好我正在尝试将imageByte[]转换为String[]并将其显示在ReportViewer Image中,如下所示:

String[] dataImage;
private void showLogo()
{
    try
    {
        SqlDataAdapter dataAdapter = new SqlDataAdapter( new SqlCommand("SELECT logo
                                           FROM company WHERE id = 1", spojeni));
        DataSet dataSet = new DataSet();
        dataAdapter.Fill(dataSet);
        if (dataSet.Tables[0].Rows.Count == 1)
        {
            dataImage = new String[0];
            dataImage = (String[])(dataSet.Tables[0].Rows[0]["logo"]);
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(""+ex);
    }
}

这是ReportViewer参数:

ReportParameter[] parameter = new ReportParameter[24];
parameter[23] = new ReportParameter("rp_logo", dataImage );
this.reportViewer1.LocalReport.SetParameters(parameter);
this.reportViewer1.RefreshReport();

但我得到以下Exception无法将'System.Byte []'类型的对象强制转换为'System.String []'

有人可以帮我解决这个问题吗?

感谢您的时间。

2 个答案:

答案 0 :(得分:2)

鉴于ReportViewer需要图像的路径,而不是实际的图像数据本身,这里最好的办法是将byte[]保存到磁盘并在参数中引用它,例如。

using (var cmd = new SqlCommand("SELECT logo FROM company WHERE id = 1", spojeni))
using (var dataAdapter = new SqlDataAdapter(cmd))
using (var dataSet = new DataSet())
{
    dataAdapter.Fill(dataSet);
    if (dataSet.Tables[0].Rows.Count == 1)
    {
        // generate temp file destination
        dataImage = System.IO.Path.GetTempFileName() + ".jpg"; // use whatever extension you expect the file to be in
        File.WriteAllBytes(dataImage, (byte[])dataSet.Tables[0].Rows[0]["logo"]); // save image to disk
    }

}

答案 1 :(得分:1)

字节到字符串的转换可以通过以下方式完成

 Encoding.Ascii.GetString(yourByteArray)

如果你需要进一步的转换,你可以做这样的事情:

Encoding.Ascii.GetString(yourByteArray).Select(c => c as string).ToArray()