6

varbinary(max)デバッグ目的で、SQL Server データベースの列からバイナリ データを取得したいと考えています。

このデータをローカル バイナリ ファイルに格納する最も簡単な方法は何ですか?

SQL Server Management Studio (「結果をファイルに出力」オプションを使用) を使用してみましたが、生のバイナリ データではなく、16 進数でエンコードされたバイナリ文字列がファイルに出力されます。

4

3 に答える 3

7

これを行うには、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 型) を使用してテストされています。

于 2010-04-28T09:14:05.387 に答える
4

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());
于 2011-05-05T14:20:32.753 に答える