簡體   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