C# 如何从SQL表转换二进制数据(检查其图像类型)并在WinC窗体上显示#
我正在尝试使用二进制文件从SQL Server读取数据,检查文件类型是否为image,然后使用C#在Windows窗体中显示它。我在两天内搜索了解决方案,我找到了一些很好的示例,但它们对我不起作用,下面是我的代码:C# 如何从SQL表转换二进制数据(检查其图像类型)并在WinC窗体上显示#,c#,sql,binary,C#,Sql,Binary,我正在尝试使用二进制文件从SQL Server读取数据,检查文件类型是否为image,然后使用C#在Windows窗体中显示它。我在两天内搜索了解决方案,我找到了一些很好的示例,但它们对我不起作用,下面是我的代码: public byte[] byteArrayIn { get; set; } public Image img { get; set; } public Image convertImage(string id) { SqlConnectio
public byte[] byteArrayIn { get; set; }
public Image img { get; set; }
public Image convertImage(string id)
{
SqlConnection con = new SqlConnection(conString);
con.Open();
SqlCommand cmd = new SqlCommand("SELECT Doc_Invoice FROM Repairs WHERE ID ="+id, con);
SqlDataReader reader = cmd.ExecuteReader();
if (reader.Read())
byteArrayIn = (byte[])reader["Doc_Invoice"];
using (var ms = new MemoryStream(byteArrayIn))
{
if (IsValidImage(byteArrayIn))
{
img = Image.FromStream(ms);
}
}
return img;
}
public static bool IsValidImage(byte[] bytes)
{
try
{
using (MemoryStream ms = new MemoryStream(bytes))
Image.FromStream(ms);
}
catch (ArgumentException)
{
return false;
}
return true;
}
我从另一种形式调用这个方法,比如
picRequest.Image = db.convertImage(id.ToString());
伙计们,只有一个问题,我的代码怎么了(
伙计们,我得到了答案我想,我也需要知道你们的答案 因此,我存储到SQL Server中的二进制数据是从MS Access(OFFICE 365)存储的 所以 我认为MS Access在将IMG转换为二进制时将其标题添加到了图片中 你们怎么想?或者有人能帮我找到多少字节使用MS Access作为头? 我将从Access的标头开始读取IMG字节,如:
using (var ms = new MemoryStream(bytes,[MS Access Header byte],bytes.Length - [MS Access Header byte]))
{
return Image.FromStream(ms);
}
您还没有告诉我们您认为代码错误的原因。什么是错误消息?哪一行失败?数据可能存储为64位基本字符串,您需要转换。或者图像可能是您的PC图形卡不支持的格式。查看流,看看字符是否有菱形和问号,表示二进制。如果l该字符的可读性比您有一个64进制字符串(不是二进制图像)好。您说的“不工作”是什么意思?您是否收到错误?您的代码是否运行,但没有显示图像?当您一步一步地调试代码时,是否所有的值都按预期设置,是否从数据库中获取记录等?此外,您应该使用@jdweng我理解您的答案,但我已经尝试使用base64字符串转换此img。结果与ReadTimeout相同'ms.ReadTimeout'引发了类型为'System.InvalidOperationException'int{System.InvalidOperationException}的异常。我认为这是主要问题。我是对的。我发现头大小为252字节,我使用代码var ms=new MemoryStream(bytes,252,bytes.Length-252)现在可以工作,但不同类型的文件具有不同的偏移量:(