如何使用c#从SQL Server获取镜像数据,写入文件,保存文件到磁盘

本文关键字:文件 保存文件 磁盘 数据 镜像 何使用 SQL 获取 Server | 更新日期: 2023-09-27 18:15:54

我试图从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;
    }

如果代码没有达到最佳实践的标准,请原谅我,我更像是一个VB程序员,我以前从来没有这样做过。我只是想得到一个工作的例子。

提前感谢。

如何使用c#从SQL Server获取镜像数据,写入文件,保存文件到磁盘

我将使用图像。FromStream方法来做到这一点:http://msdn.microsoft.com/en-us/library/system.drawing.image.fromstream (v = vs.110) . aspx

protected bool SaveData(string FileName, byte[] Data)
{
    using (Image image = Image.FromStream(new MemoryStream(Data)))
    {
        image.Save("MyImage.jpg", ImageFormat.Jpeg);
    }
    return true;
}

感谢大家的投入。在做了一些额外的测试之后,我认为从数据库中检索的数据已经以某种方式被压缩了。我能够以编程方式插入和拔出文件,问题出现在应用程序将数据放入数据库(第三方软件)时。我要研究一下压缩我能想到什么。