2017-04-27 101 views
1

我正在創建一個數據庫(與VS精靈),其中包含2列:標識,FDATA ;; fData類型是nvarchar(MAX)。 ,然後我將文件插入使用此命令:後會失去C#的SQL數據複製它們

public void InsertToDB() 
     { 
      byte[] data = File.ReadAllBytes(barcodeEXE); //this is an exe file 
      string base64 = Convert.ToBase64String(data); 

      mytbl3TableAdapter.Insert(1, base64); 
      mytbl3TableAdapter.Fill(mydb3DataSet.mytbl3); 
      //FILE ADDED ! 
     } 

現在所有的事情是確定的(文件加入到與base64string格式的數據庫,我們並不需要使用這些命令再次插入文件)問題是在這裏:我會從數據庫中的數據複製到其他文件夾,用以下命令:

public void CopyFromDB() 
     { 
      con = new SqlConnection(); 
      con.ConnectionString = CnString; 
      con.Open(); //start  

      SqlCommand cmd = new SqlCommand("SELECT fData FROM [mytbl3] WHERE Id=1", con); 

      using (SqlDataReader d = cmd.ExecuteReader()) 
      { 
       string base64; 
       base64 = ((string)mydb3DataSet.Tables[0].Rows[0]["fData"]); 
       byte[] base64byte = Convert.FromBase64String(base64); 
       mytbl3TableAdapter.Update(mydb3DataSet.mytbl3); 
       mytbl3TableAdapter.Fill(mydb3DataSet.mytbl3); 

       SaveFileDialog ofd = new SaveFileDialog(); ofd.Filter = "exe file|*.exe"; 
       if (ofd.ShowDialog() == DialogResult.OK) 
       { 
        File.WriteAllBytes(ofd.FileName, base64byte); 


        System.Threading.Thread.Sleep(3000); 

        d.Close(); 
        // 
       } 
       d.Close(); 
      } 

      //end 
      con.Close(); 

     } 

文件將成功複製,但數據從數據庫中刪除!

+0

這不是從數據庫複製數據,你只是獲取數據和什麼都沒有.. –

+0

https://開頭MSDN。 microsoft.com/en-us/library/6ka1wd3w(v=vs.110).aspx –

+0

@reds沒有它的作品。我可以發送exe文件給你。問題是數據將從數據庫中刪除。它就像過去一樣! – FREEMAN

回答

0

的CopyFromDB功能看起來是不是你做打算什麼:

public void CopyFromDB() 
{ 
     con = new SqlConnection(); 
     con.ConnectionString = CnString; 
     con.Open(); //start  

     SqlCommand cmd = new SqlCommand("SELECT fData FROM [mytbl3] WHERE Id=1", con); 

     using (SqlDataReader d = cmd.ExecuteReader()) 
     { 
      if (d.Read()) 
      { 
       string base64; 
       base64 = reader.GetString(d.GetOrdinal("fData")); 
       byte[] base64byte = Convert.FromBase64String(base64); 

       SaveFileDialog ofd = new SaveFileDialog(); ofd.Filter = "exe file|*.exe"; 
       if (ofd.ShowDialog() == DialogResult.OK) 
       { 
        File.WriteAllBytes(ofd.FileName, base64byte); 
        System.Threading.Thread.Sleep(3000); 
       } 
      } 

      d.Close(); 

      //end 
      con.Close(); 
     } 
} 
+0

我取代它,但它似乎如果(d.Read())返回false _編輯:「讀者」不簽字,我d.GetString(d.GetOrdinal(「FDATA」))取代它;但我仍然有相同的問題 – FREEMAN

+0

如果d.Read()爲false,那麼沒有數據從數據庫中讀取! – Digvijay

+0

因此,如果沒有數據(!)如何從數據庫writeAllBytes成功進入選擇的路徑保存(我的代碼而已。我的意思是用SaveFileDialog) – FREEMAN