如何使用 C# 从 SQL Server 获取图像数据、写入文件、将文件保存到磁盘

ORI*_*ION 5 c# sql sql-server

我正在尝试从 SQL Server 数据库获取存储为图像数据类型的附件(图像、Word 文档等)。附件可以是任何文件类型,但我只是想成功下载 .jpg。

我可以将文件保存到本地驱动器,但似乎在此过程中损坏了文件。

我正在尝试做的事情:

  1. 从 SQL Server 数据库检索 IMAGE 类型的二进制数据。
  2. 从二进制数据创建文件。
  3. 将文件保存到本地目录。

我的代码:

    public void ProcessRequest()
    {
        //Get the ticket number from query string
        _ticketNumber = context.Request.QueryString["ID"];

        SqlConnection conn = new SqlConnection(_DBConn);
        SqlCommand cmd = new SqlCommand();
        string fileName = ""; //Holds the file name retrieved from DB
        byte[] data; // Holds the IMAGE data from DB

        using (conn)
        {
            using (cmd)
            {

                cmd.CommandType = CommandType.Text;
                cmd.CommandText = @"SELECT File_Name, Data FROM Tickets_All INNER JOIN Attachments ON Tickets_All.ID = Attachments.[Object_ID] WHERE Ticket = @Ticket";
                cmd.Parameters.AddWithValue("@Ticket", _ticketNumber);
                cmd.Connection = conn;
                conn.Open();

                SqlDataReader reader = cmd.ExecuteReader();

                if (reader.HasRows)
                {
                    while (reader.Read())
                    {
                        fileName = reader.GetString(0);
                        data = (byte[])reader["Data"];

                        if (data != null)
                        {
                            SaveData(fileName, data);
                        }
                    }
                }

                reader.Close();

            }
        }

    protected bool SaveData(string FileName, byte[] Data)
    {
        string path = @"C:\Windows\temp\test.jpg";

        try
        {
            BinaryWriter writer = new BinaryWriter(File.OpenWrite(path));
            writer.Write(Data);
            writer.Flush();
            writer.Close();
        }
        catch (Exception ex)
        {
            return false;
        }

        return true;
    }
Run Code Online (Sandbox Code Playgroud)

如果代码不符合最佳实践,请原谅我,我更像是一名 VB 程序员,以前从未这样做过。我只是想得到一个可行的例子。

提前致谢。

ORI*_*ION 0

感谢大家的意见和建议。经过一些额外的测试后,我认为从数据库检索的数据已以某种方式压缩。我能够以编程方式插入和取出文件,问题是当应用程序将数据放入数据库(第三方软件)时出现的。我将研究我能想到的压缩方法。