varbinary(max)デバッグ目的で、SQL Server データベースの列からバイナリ データを取得したいと考えています。
このデータをローカル バイナリ ファイルに格納する最も簡単な方法は何ですか?
SQL Server Management Studio (「結果をファイルに出力」オプションを使用) を使用してみましたが、生のバイナリ データではなく、16 進数でエンコードされたバイナリ文字列がファイルに出力されます。
varbinary(max)デバッグ目的で、SQL Server データベースの列からバイナリ データを取得したいと考えています。
このデータをローカル バイナリ ファイルに格納する最も簡単な方法は何ですか?
SQL Server Management Studio (「結果をファイルに出力」オプションを使用) を使用してみましたが、生のバイナリ データではなく、16 進数でエンコードされたバイナリ文字列がファイルに出力されます。
これを行うには、C# を少し捨てるよりも簡単な方法は考えられません...
static void Main(string[] args)
{
GetBinaryDataToFile("Server=localhost;Initial Catalog=ReportServer;Integrated Security=true", "D:\\temp.dat");
}
public static void GetBinaryDataToFile(string connectionString, string path)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlCommand command = connection.CreateCommand())
{
command.CommandText = "SELECT Sid FROM Users WHERE UserID = '62066184-8403-494E-A571-438ABF938A4F'";
command.CommandType = CommandType.Text;
using (SqlDataReader dataReader = command.ExecuteReader())
{
if (dataReader.Read())
{
SqlBinary sqlBinary = dataReader.GetSqlBinary(0);
File.WriteAllBytes(path, sqlBinary.Value);
}
dataReader.Close();
}
}
connection.Close();
}
}
このコードは、SQL Server と Reporting Services の既定のインストールで、Users.Sid 列 (varbinary 型) を使用してテストされています。
LinqPad の提案が気に入りました。試してみたところ、10 分以内にバイナリをファイルに吐き出すクエリがありました。VS プロジェクトもビルドもありません。スクリプトは保存され、いつでも取得できます。とてもクール!
LinqPad スクリプト:
var g = from pd in Archives
where pd.ArchiveId == 123
select pd;
var q = from p in printDocs
where p.DocumentId == g.SingleOrDefault().DocumentId
select p;
File.WriteAllBytes("C:\\temp.pdf", q.SingleOrDefault().Pdf.ToArray());