Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从SQL表转换二进制数据(检查其图像类型)并在WinC窗体上显示#_C#_Sql_Binary - Fatal编程技术网

C# 如何从SQL表转换二进制数据(检查其图像类型)并在WinC窗体上显示#

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

我正在尝试使用二进制文件从SQL Server读取数据,检查文件类型是否为image,然后使用C#在Windows窗体中显示它。我在两天内搜索了解决方案,我找到了一些很好的示例,但它们对我不起作用,下面是我的代码:

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)现在可以工作,但不同类型的文件具有不同的偏移量:(