C#将所有blob从数据库中拉出并保存到路径

时间:2015-07-16 14:55:35

标签: c# console blob

这里的某个人已经把我推向了正确的方向。我相信我现在正在将我的所有blob从我的数据库中拉出来。我唯一想不到的是(我认为)是设置保存位置的地方。

以下是所有代码:

namespace PullBlobs
{
    class Program
    {
        static void Main()
        {
        string connectionString = "Data Source=NYOPSSQL05;Initial Catalog=Opsprod;Integrated Security=true;User Id=username;Password=password;";

        using (SqlConnection connection = new SqlConnection(connectionString))
        {

            SqlCommand cmd = new SqlCommand();
            cmd.CommandText = "Select FileName, FileData from IntegrationFile where IntegrationFileID = @Request_ID";
            cmd.Connection = connection;
            cmd.Parameters.Add("@Request_ID", SqlDbType.UniqueIdentifier).Value = new Guid("EBFF2CEA-3FF9-4D22-ABEF-3240647119CC");

            connection.Open();
            SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess);

            while (reader.Read())
            {
                // Writes the BLOB to a file (*.bmp).
                FileStream stream;
                // Streams the BLOB to the FileStream object.
                BinaryWriter writer;

                // Size of the BLOB buffer.
                int bufferSize = 100;
                // The BLOB byte[] buffer to be filled by GetBytes.
                byte[] outByte = new byte[bufferSize];
                // The bytes returned from GetBytes.
                long retval;
                // The starting position in the BLOB output.
                long startIndex = 0;

                // The publisher id to use in the file name.
                string FileName = "";                     

                // Get the publisher id, which must occur before getting the logo.
                FileName = reader.GetString(0);

                // Create a file to hold the output.
                stream = new FileStream(
                  FileName + ".txt", FileMode.OpenOrCreate, FileAccess.Write);
                writer = new BinaryWriter(stream);

                // Reset the starting byte for the new BLOB.
                startIndex = 0;

                // Read bytes into outByte[] and retain the number of bytes returned.
                retval = reader.GetBytes(1, startIndex, outByte, 0, bufferSize);

                // Continue while there are bytes beyond the size of the buffer.
                while (retval == bufferSize)
                {
                    writer.Write(outByte);
                    writer.Flush();

                    // Reposition start index to end of last buffer and fill buffer.
                    startIndex += bufferSize;
                    retval = reader.GetBytes(1, startIndex, outByte, 0, bufferSize);
                }

                // Write the remaining buffer.
                writer.Write(outByte, 0, (int)retval - 1);
                writer.Flush();

                // Close the output file.
                writer.Close();
                stream.Close();
            }

            // Close the reader and the connection.
            reader.Close();
            connection.Close();


        }
    }
}
}

我认为除了在哪里设置保存文件的路径之外,我所有的东西都改变了我需要的方式。这是我在msdn上找到的链接,我从中获取了大部分代码(并对其进行了修改)。

https://msdn.microsoft.com/en-us/library/87z0hy49(v=vs.110).aspx

2 个答案:

答案 0 :(得分:0)

愚蠢的问题,但是那个请求ID是否有任何实际的blob?

此外,由于您只是从数据库中读取blob并将其写入文件,为什么不使用BCP?

https://msdn.microsoft.com/en-us/library/ms162802.aspx

答案 1 :(得分:0)

我想出了把路径放在哪里的答案。确保在引号前加上@符号。

stream = new FileStream(@"c:\dev\Blobs\" + FileName + ".txt", FileMode.OpenOrCreate, FileAccess.Write);