簡體   English   中英

如何將文件(PDF)插入到varbinary SQL Server列中,然后檢索它?

[英]How do you insert a file (PDF) into a varbinary SQL Server column and later retrieve it?

我希望獲取運行報告的結果(Crystal Reports的PDF文件),序列化它,將其粘貼到varbinary字段中,然后再將其反序列化並將其呈現給用戶。

現在我只需要簡單的舊ADO .NET(SqlClient,SqlCommand等)

這有什么陷阱嗎? 鑒於我會知道本地機器上當前保存PDF文件的路徑,實現此目的的基本語法是什么?

編輯:剛剛在MSDN文檔中看到Image將被刪除 更好地使用VARBINARY(MAX)。 (嘿,我不知道那個)。

我的老答案: VARBINARY的限制為8 KB。 可能太小而無法存儲PDF文件。 您最好使用IMAGE數據類型。

使用參數通過SqlCommand插入/選擇數據,您可以像任何普通字段一樣使用純SQL。

傳遞到圖像字段的數據是一個字節數組。

編輯2:由於您使用的是C#,因此您應該使用DataReader檢索數據。 要創建DataReader,請使用SqlCommand.ExecuteReader上的SequentialAccess標志,以防止數據過早地被讀入內存。

我真的不會將一個byte[]參數用於IDbCommand 如果你的PDF是100 Mb大怎么辦? 據我所知,在將結果發送到請求的瀏覽器之前,這將從您的數據庫中獲取所有100 Mb(在服務器上需要大量內存)。 現在考慮獲得大約這個大小的不同PDF的大量並發請求......每秒...這不是很可擴展。

有關可能的解決方案,請查看“Blob + Stream = BlobStream” ,這是我幾年前在荷蘭為.NET雜志撰寫的一篇文章。 此方法使用SQL Server命令從Stream派生類訪問BLOB的各個部分。

這篇文章是荷蘭語,但與之相關的示例代碼應該足以讓您入門。 此外,Peter De Jonghe似乎已經在CodeProject上撰寫了一篇文章,文章對我的文章進行了一些擴展,將其概括為不僅僅是SQL Server中的image列。 這篇文章是英文的。

我希望這可以幫助您解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM