从数据库下载pdf文件时更改的文件名
本文关键字:文件名 文件 数据库 下载 pdf | 更新日期: 2023-09-27 18:36:45
我将PDF文件保存在数据库中,从数据库下载后,我看到它的名称完全更改为类似代码的内容,您能解释一下为什么吗? 以及如何解决此问题以获取与PDF文件相同的名称? 这是代码:
插入
OpenFileDialog ofd = new OpenFileDialog();
ofd.ShowDialog();
byte[] file;
using (var stream = new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read))
{
using (var reader = new BinaryReader(stream))
{
file = reader.ReadBytes((int)stream.Length);
}
}
SqlConnection varConnection = new SqlConnection("Server=.''sqlexpress;Database=badge;integrated security=yes");
varConnection.Open();
using (var sqlWrite = new SqlCommand("INSERT INTO archive Values(@dat,@disponible,@fil)", varConnection))
{
sqlWrite.Parameters.Add("@dat", SqlDbType.Date).Value = DateTime.Today;
sqlWrite.Parameters.Add("@disponible", SqlDbType.VarChar, 20).Value = comboBox1.Text;
sqlWrite.Parameters.Add("@fil", SqlDbType.VarBinary, file.Length).Value = file;
sqlWrite.ExecuteNonQuery();
}
varConnection.Close();
OpenFileDialog ofd = new OpenFileDialog();
ofd.ShowDialog();
byte[] file;
using (var stream = new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read))
{
using (var reader = new BinaryReader(stream))
{
file = reader.ReadBytes((int)stream.Length);
}
}
SqlConnection varConnection = new SqlConnection("Server=.''sqlexpress;Database=badge;integrated security=yes");
varConnection.Open();
using (var sqlWrite = new SqlCommand("INSERT INTO archive Values(@dat,@disponible,@fil)", varConnection))
{
sqlWrite.Parameters.Add("@dat", SqlDbType.Date).Value = DateTime.Today;
sqlWrite.Parameters.Add("@disponible", SqlDbType.VarChar, 20).Value = comboBox1.Text;
sqlWrite.Parameters.Add("@fil", SqlDbType.VarBinary, file.Length).Value = file;
sqlWrite.ExecuteNonQuery();
}
varConnection.Close();
下载:
SqlConnection varConnection = new SqlConnection("Server=.''sqlexpress;Database=badge;integrated security=yes");
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "select fil from archive where dat = '" + dateTimePicker1.Value.ToString("yyyy-MM-dd") + "' and disponible='"+comboBox1.Text+"'";
cmd.Connection = varConnection;
varConnection.Open();
SqlDataReader sqlRead = cmd.ExecuteReader();
SaveFileDialog svd = new SaveFileDialog();
svd.ShowDialog();
if (sqlRead.HasRows)
{
while (sqlRead.Read())
{
byte[] fileData = (byte[])sqlRead[0];
BinaryWriter fileCreate =
new BinaryWriter(File.Open(svd.FileName, FileMode.Create));
fileCreate.Write(fileData);
fileCreate.Close();
}
}
varConnection.Close();
您似乎没有保存和获取原始文件名,而且您正在从SaveFileDialog
中获取它
SaveFileDialog svd = new SaveFileDialog();
// ...
// svd.FileName is used, that is, user provided file name for the saved file
BinaryWriter fileCreate = new BinaryWriter(File.Open(svd.FileName, FileMode.Create));
您应该执行以下操作:
- 将原始文件名保存在数据库中 (
ofd.FileName
) - 执行选择时检索它 (
cmd.CommandText = "select fil, filename from archive where dat = "
)
附言您的代码还有一些其他问题需要解决
- 处理
SqlConnection
,SqlCommand
,并通过将它们放入using
块中来SqlDataReader
-
cmd.CommandText = "select fil from archive where dat = '" + dateTimePicker1.Value.ToString("yyyy-MM-dd") + "' and disponible='"+comboBox1.Text+"'";
应该参数化,而不是通过字符串连接获得