![](/img/trans.png)
[英]How do I insert/retrieve Excel files to varbinary(max) column in SQL Server 2008?
[英]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.