C# 无法强制转换类型为';字节[]和#x27;输入';System.String[]和#x27;

C# 无法强制转换类型为';字节[]和#x27;输入';System.String[]和#x27;,c#,.net,winforms,reportviewer,C#,.net,Winforms,Reportviewer,您好,我正在尝试将图像从字节[]转换为字符串[],并在报表查看器图像中显示它,如下所示: String[] dataImage; private void showLogo() { try { SqlDataAdapter dataAdapter = new SqlDataAdapter( new SqlCommand("SELECT logo FROM company WHER

您好,我正在尝试将
图像
字节[]
转换为
字符串[]
,并在
报表查看器图像
中显示它,如下所示:

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();
但我得到了以下
异常
无法将“System.Byte[]”类型的对象强制转换为“System.String[]”类型

有人能帮我解决这个问题吗


谢谢您的时间。

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

 Encoding.Ascii.GetString(yourByteArray)
如果您需要进一步转换,您可以这样做:

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

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

 Encoding.Ascii.GetString(yourByteArray)
如果您需要进一步转换,您可以这样做:

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

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

 Encoding.Ascii.GetString(yourByteArray)
如果您需要进一步转换,您可以这样做:

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

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

 Encoding.Ascii.GetString(yourByteArray)
如果您需要进一步转换,您可以这样做:

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

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

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
    }

}

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

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
    }

}

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

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
    }

}

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

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
    }

}



为什么首先需要字符串[]?字节[]不是图像吗?@Rubens将字节[]作为reportviewer参数传递不是不可能吗?我从未使用过它;谷歌搜索,似乎你需要创建一个物理文件并使用它,将图像完整路径传递给你。另外,看看这里:@Marek正如鲁本斯已经指出的那样,
ReportViewer
需要磁盘上文件的路径-我建议你将
字节[]
作为临时文件保存到磁盘,然后将路径作为参数值传递。如果
ReportViewer
获取图像的内存副本,则可以放弃临时文件。为什么首先需要字符串[]?字节[]不是图像吗?@Rubens将字节[]作为reportviewer参数传递不是不可能吗?我从未使用过它;谷歌搜索,似乎你需要创建一个物理文件并使用它,将图像完整路径传递给你。另外,看看这里:@Marek正如鲁本斯已经指出的那样,
ReportViewer
需要磁盘上文件的路径-我建议你将
字节[]
作为临时文件保存到磁盘,然后将路径作为参数值传递。如果
ReportViewer
获取图像的内存副本,则可以放弃临时文件。为什么首先需要字符串[]?字节[]不是图像吗?@Rubens将字节[]作为reportviewer参数传递不是不可能吗?我从未使用过它;谷歌搜索,似乎你需要创建一个物理文件并使用它,将图像完整路径传递给你。另外,看看这里:@Marek正如鲁本斯已经指出的那样,
ReportViewer
需要磁盘上文件的路径-我建议你将
字节[]
作为临时文件保存到磁盘,然后将路径作为参数值传递。如果
ReportViewer
获取图像的内存副本,则可以放弃临时文件。为什么首先需要字符串[]?字节[]不是图像吗?@Rubens将字节[]作为reportviewer参数传递不是不可能吗?我从未使用过它;谷歌搜索,似乎你需要创建一个物理文件并使用它,将图像完整路径传递给你。另外,看看这里:@Marek正如鲁本斯已经指出的那样,
ReportViewer
需要磁盘上文件的路径-我建议你将
字节[]
作为临时文件保存到磁盘,然后将路径作为参数值传递。如果
ReportViewer
获取图像的内存副本,则可以丢弃临时文件。您好,我尝试过,最后它运行良好,但在
ReportViewer的图像中
ErrorImage
图片。这是否意味着它没有正确传递?您好,我尝试过,最后它运行得很好,但在
ReporViewer的图片中
ErrorImage
图片。这是否意味着它没有正确传递?您好,我尝试过,最后它运行得很好,但在
ReporViewer的图片中
ErrorImage
图片。这是否意味着它没有正确传递?您好,我尝试过,最后它运行得很好,但在
ReporViewer的图片中
ErrorImage
图片。这是否意味着它没有正确通过?非常感谢您的帮助!不幸的是,在最后一行我得到了以下错误:
与System.IO.FIle.writealBytes}字符串的最佳重载方法匹配,字节[]
有一些无效参数。而
无法从
对象`转换为
字节
。我可以寻求帮助吗?非常感谢,但似乎错误仍然存在。这不是因为
dataImage
String[]
?我应该改用字符串吗?还有最后一个问题。它正确吗?然后像这样传递参数
parameter[23]=new ReportParameter(“rp_logo”,dataImage)
?@Marek-yep该部分没有更改,
dataImage
现在设置为文件路径,而不是数据。非常感谢您的帮助!不幸的是,在最后一行我得到了以下错误:
与System.IO.FIle.writealBytes}字符串的最佳重载方法匹配,字节[]
有一些无效参数。而
无法从
对象`转换为
字节
。我可以请你帮忙吗?非常感谢,但是看起来