簡體   English   中英

從 SQL 服務器檢索保存為 varbinary(max) 的 pdf 附件並使用 C# 保存到本地驅動器的最佳方法

[英]Best way to retrieve pdf attachments saved as varbinary(max) from SQL Server and save to a local drive using C#

我有幾千個附件保存在 SQL 服務器數據庫中,列數據類型為varbinary(max) 我想檢索所有這些文件並將它們保存到本地驅動器。

實現這一目標的最佳方法是什么? 我不是專門尋找代碼,而是試圖了解所有選項,以便我可以在 C# 中執行此操作。

建議表示贊賞。 謝謝

您可以執行以下任一操作:

  • 編寫一個 SQL 腳本,它將從表中讀取數據並將這些數據保存到磁盤。 是如何做到的
  • 您可以編寫一個 C# 腳本,它將連接到數據庫,讀取數據並將其作為文件存儲到磁盤

如果將所有文件存儲到一個文件夾中,請使用表的 ID 作為文件名的一部分以使其唯一。

這是示例代碼。 注意,命名空間 System.Data.SqlClient 沒有像 .NET 框架那樣默認被 .NET Core 項目引用; 您必須手動將 System.Data.SqlClient NuGet package 添加到項目中。

using System.Data.SqlClient;

var connectionString = "Data Source=localhost;Initial Catalog=MyDatbase;Integrated Security=True;";

var outputFolder = @"C:\temp\";

using var conn = new SqlConnection(connectionString);
conn.Open();

var query = "select DocumentId, Contents from DocumentFile where ID >= 1234";
using var cmd = new SqlCommand(query);
cmd.Connection = conn;

var reader = cmd.ExecuteReader();
if (!reader.HasRows) throw new Exception("No rows!");

while (reader.Read())
{
    var fileName = $"{reader["DocumentId"]}.pdf";
    var data = (byte[])reader["Contents"];
    if (data == null) throw new Exception("Contents is null");

    using var writer = new BinaryWriter(File.OpenWrite(Path.Combine(outputFolder, fileName)));
    writer.Write(data);
}

暫無
暫無

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

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