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}字符串的最佳重载方法匹配,字节[]
有一些无效参数。而无法从
对象`转换为字节
。我可以请你帮忙吗?非常感谢,但是看起来