如何使用c#从SQL Server获取镜像数据,写入文件,保存文件到磁盘
本文关键字:文件 保存文件 磁盘 数据 镜像 何使用 SQL 获取 Server | 更新日期: 2023-09-27 18:15:54
我试图从SQL Server数据库获取附件(图像,word文档等)存储为图像数据类型。附件可以是任何文件类型,但我只是想让一个。jpg文件下载成功。
我可以将文件保存到本地驱动器,但是在此过程中文件似乎被破坏了。
我想做什么:
- 从SQL Server数据库中检索IMAGE类型的二进制数据
- 从二进制数据创建文件
- 将文件保存到本地目录
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程序员,我以前从来没有这样做过。我只是想得到一个工作的例子。
提前感谢。
我将使用图像。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;
}
感谢大家的投入。在做了一些额外的测试之后,我认为从数据库中检索的数据已经以某种方式被压缩了。我能够以编程方式插入和拔出文件,问题出现在应用程序将数据放入数据库(第三方软件)时。我要研究一下压缩我能想到什么。