2016-02-28 78 views
0

我將pdf文件保存在數據庫中,當我從數據庫中下載後,我發現它的名稱已完全更改爲Code之類的東西,請問您能解釋一下原因嗎?以及如何解決這個問題,以獲得相同的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(); 
+0

做你讀了你的代碼做什麼?如果你閱讀它就很清楚了...... – Gusman

回答

1

你似乎並不保存和獲取原始文件名,你也從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)); 

你應該做的事情因爲:

  1. 保存原文件名數據庫(ofd.FileName
  2. 當進行選擇(cmd.CommandText = "select fil, filename from archive where dat = "

附:取回也有一些其他的問題,你的代碼,你應該解決

  1. 通過把它們放在using
  2. 處置 SqlConnectionSqlCommandSqlDataReader
  3. cmd.CommandText = "select fil from archive where dat = '" + dateTimePicker1.Value.ToString("yyyy-MM-dd") + "' and disponible='"+comboBox1.Text+"'";應該是參數化的,而不是通過字符串連接獲得
相關問題