C# 如果数据库中存在字节文件,如何使用查询进行比较?

C# 如果数据库中存在字节文件,如何使用查询进行比较?,c#,asp.net,sql,sql-server,bytearray,C#,Asp.net,Sql,Sql Server,Bytearray,我想检查数据库中是否存在该文件,是否使用asp.net。我搜索了一下,但没有找到与字节文件相比较的内容 我使用了VisualStudio2010、SQLServer2008和C语言 因此,我尝试编写此代码,但显示错误: “System.Byte[]”附近的语法不正确 还有,这个问题还有别的解决办法吗 代码 谢谢。您不能像我们在其他数据类型上那样比较字节流中的文件。您可以为一个文件生成一些唯一的值,如哈希或校验和,并将其与字节流一起存储在DB中,用于检查文件是否存在。通常,这些机制不用于此目的。这

我想检查数据库中是否存在该文件,是否使用asp.net。我搜索了一下,但没有找到与字节文件相比较的内容

我使用了VisualStudio2010、SQLServer2008和C语言

因此,我尝试编写此代码,但显示错误:

“System.Byte[]”附近的语法不正确

还有,这个问题还有别的解决办法吗

代码


谢谢。

您不能像我们在其他数据类型上那样比较字节流中的文件。您可以为一个文件生成一些唯一的值,如哈希或校验和,并将其与字节流一起存储在DB中,用于检查文件是否存在。通常,这些机制不用于此目的。这仅在文件内容完全相同的情况下有效。即使是最微小的变化也无法识别匹配项

或者,您也可以决定像通常一样存储一些备用信息。例如,使用文件名或基于用户的验证来检查文件是否存在

编辑:

你可以找到像这样的散列

string hash;
using(SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider())
{
    hash = Convert.ToBase64String(sha1.ComputeHash(byteArray));
}

您不能像在其他数据类型上那样比较字节流中的文件。您可以为一个文件生成一些唯一的值,如哈希或校验和,并将其与字节流一起存储在DB中,用于检查文件是否存在。通常,这些机制不用于此目的。这仅在文件内容完全相同的情况下有效。即使是最微小的变化也无法识别匹配项

或者,您也可以决定像通常一样存储一些备用信息。例如,使用文件名或基于用户的验证来检查文件是否存在

编辑:

你可以找到像这样的散列

string hash;
using(SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider())
{
    hash = Convert.ToBase64String(sha1.ComputeHash(byteArray));
}

我同意,正如上面帖子所建议的,您可以维护散列来管理文件比较

既然您询问了如何使用查询进行比较,我在这里又添加了一个建议

用C编写一个函数来获取MD5哈希。下面是函数的代码

public static string GetMD5Hash(string input)
    {
        System.Security.Cryptography.MD5CryptoServiceProvider x = new System.Security.Cryptography.MD5CryptoServiceProvider();
        byte[] bs = System.Text.Encoding.UTF8.GetBytes(input);

        bs = x.ComputeHash(bs);

        System.Text.StringBuilder s = new System.Text.StringBuilder();

        foreach (byte b in bs)
        {
            s.Append(b.ToString("x2").ToLower());
        }
        return s.ToString();
    }
所以获取文件的MD5哈希,然后使用HASHBYTES'MD5',VarbinaryColumn,您可以比较值。这将起作用,因为您将在SQL server中生成MD5哈希并使用哈希字节进行比较

您还可以在SQLServer和C端执行其他类型的散列,如SHA1

更多关于hashbytes的信息-


同样,这也有同样的限制,内容的细微变化意味着SQL中发布的文件和存储的文件不匹配。

我同意,正如上面文章中所建议的,您可以维护哈希来管理文件比较

既然您询问了如何使用查询进行比较,我在这里又添加了一个建议

用C编写一个函数来获取MD5哈希。下面是函数的代码

public static string GetMD5Hash(string input)
    {
        System.Security.Cryptography.MD5CryptoServiceProvider x = new System.Security.Cryptography.MD5CryptoServiceProvider();
        byte[] bs = System.Text.Encoding.UTF8.GetBytes(input);

        bs = x.ComputeHash(bs);

        System.Text.StringBuilder s = new System.Text.StringBuilder();

        foreach (byte b in bs)
        {
            s.Append(b.ToString("x2").ToLower());
        }
        return s.ToString();
    }
所以获取文件的MD5哈希,然后使用HASHBYTES'MD5',VarbinaryColumn,您可以比较值。这将起作用,因为您将在SQL server中生成MD5哈希并使用哈希字节进行比较

您还可以在SQLServer和C端执行其他类型的散列,如SHA1

更多关于hashbytes的信息-


同样,这也有同样的限制,内容的细微变化意味着SQL中发布的文件和存储的文件不匹配。

文件通常不包含文件名,甚至不包含扩展名。你到底想干什么?如果您试图通过二进制文件的内容搜索其类型。。您必须非常熟悉文件格式。文件通常不包含其文件名甚至扩展名。你到底想干什么?如果您试图通过二进制文件的内容搜索其类型。。您必须非常熟悉文件格式。如何从字节文件创建哈希文件?什么是支票金额?非常感谢。我将尝试:如何从字节文件创建哈希文件?什么是支票金额?非常感谢。我会尝试: