繁体   English   中英

SQL Server和C#-如何检查我要上传的varbinary(max)文件是否已存在于表中?

[英]SQL Server & C# - How can I check if a varbinary(max) file i'm uploading already exists in a table?

我将文件以以下格式存储在SQL Server的表中:

FileID-int(自动递增),FileName-VarBinary(MAX),FileData-VarBinary(MAX)。

我想做的是-通过上传新的FileName和FileData作为参数,返回FileName和File Data匹配的第一个FileID,如下所示:

SqlCommand cmd = new SqlCommand("SELECT TOP 1 FileID FROM Attachments WHERE FileName = @FileName AND FileData = @FileData", Program.connection);
cmd.Parameters.AddWithValue("@FileName", Path.GetFileName(MyFile));
cmd.Parameters.Add("@FileData", SqlDbType.VarBinary).Value = File.ReadAllBytes(MyFile);
int result = (int)cmd.ExecuteScalar();

但是,无论我做什么,该函数都会在最后一行真正执行查询时(无一例外)终止。 我究竟做错了什么?

我希望不要获取每个文件的数据,并且尽可能使用C#进行比较。

正如其他人在评论中所写:首先,扩展您的表以容纳另外2列。 一个用于内容的哈希,另一个用于文件长度。 然后,当用户上传文件时,您可以哈希文件的内容并获取其长度。 然后,查询SQL Server以查找包含相同长度和相同哈希(以及相同名称,如果您希望将具有不同名称的相同文件视为不同文件)的行。 如果命中,则不将文件传输到SQL Server,如果命中,则创建新记录。

希望能有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM