2012-09-01 53 views
1

我有一個Visual C#2008項目。在我的項目瀏覽器中,我有一個SQL CE數據庫(sdf文件),所以我可以在設計器中使用數據庫和數據集。在運行時,sdf文件被複制到輸出目錄。當用戶保存他們自己的數據庫時,該sdf文件被複制到用戶選擇的任何文件名,並將他們的數據集保存到副本中。到目前爲止沒有問題。如何以編程方式複製包含的文件

我想盡可能以不同的方式做到這一點。當程序第一次運行時,我不想將sdf文件複製出來,我想設置它,以便當用戶保存他們的數據庫時,然後使用他們選擇的名稱複製sdf文件並將它們的數據集保存到它。

我已經閱讀了將文件寫成二進制文件的方法,該方法可以正常工作,但需要幾行代碼纔會顯得不必要。是不是有一種方法來告訴程序「嘿,繼續,並快速複製這個SDF文件」?畢竟,程序能夠在您第一次運行時自動執行此操作。

+0

你要什麼語言這個腳本是在和你嘗試過什麼? –

+0

(Visual)C#,正如我所說的。對不起,如果我不夠清楚。現在,該文件被設置爲僅設置爲「始終複製」。我嘗試了一種將文件寫入二進制流的方法,就像我在現在似乎找不到的stackoverflow上建議的那樣,但正如我所說的,它似乎需要太多的代碼,我認爲必須有一個簡單的命令來導出文件,因爲程序有能力在第一次運行時執行它。我知道我可以在設計時將文件保存出來,並將其作爲資源輕鬆導出,但在解決方案中將文件重複兩次似乎是多餘的。 –

回答

1

將數據庫文件添加爲項目中的資源。然後,當你想要出現文件時,只需將字節數組寫入文件即可。

例子:

File.WriteAllBytes("destination path", Properties.Resources.YourResourceName); 
+0

我知道我可以將它作爲資源添加並簡單地「寫入所有字節」,我並不完全反對這個想法。考慮到文件已經在項目中,在我的解決方案資源管理器中,它似乎有點多餘。而且由於我可以選擇「複製如果更新」或「始終複製」(意思是程序可以從那裏導出文件),那麼就會有像您剛發佈的簡單的單行代碼。如果我錯了,你的方法可能是我最好的選擇。 –

+0

我指出的方法意味着數據庫將在.exe本身內。你上面提到的選項在哪裏意味着你需要運送一個額外的文件(數據庫文件).exe。或者,可以使用某些類以編程方式創建數據庫,具體取決於您使用的是哪種類型的數據庫。很難給你更多的信息,而不知道你目前使用的是哪個數據庫。但請記住它將涉及以編程方式重新創建每個列的表/列/屬性等。 – coolmine

+0

只是注意到你的問題提到你正在使用的數據庫。看看http://stackoverflow.com/questions/6196274/create-sqlce-database-programatically&http://stackoverflow.com/questions/1487845/create-sql-server-ce-database-file-programmatically – coolmine

0

我愛你棧用戶 你可以分析這些代碼找到一些可以使用系統幫助

分享我的知識;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Data.SqlServerCe;

using System.IO;

namespace localdatabaseconnect 

{

public partial class Form1 : Form 

{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 
    string conString = Properties.Settings.Default.locallyConnectionString; 
    private void button1_Click(object sender, EventArgs e) 
    { 


     // Open the connection using the connection string. 
     using (SqlCeConnection con = new SqlCeConnection(conString)) 
     { 
      con.Open(); 

      // Insert into the SqlCe table. ExecuteNonQuery is best for inserts. 
      int id = int.Parse(textBox1.Text); 
      string nom = textBox2.Text; 
      string prenom = textBox3.Text; 
      using (SqlCeCommand com = new SqlCeCommand("INSERT INTO testme (id,nom,prenom) VALUES(@id,@nom,@prenom)", con)) 
      { 
       com.Parameters.AddWithValue("@id", id); 
       com.Parameters.AddWithValue("@nom", nom); 
       com.Parameters.AddWithValue("@prenom", prenom); 
       com.ExecuteNonQuery(); 
      } 
      con.Close(); 
     } 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     using (SqlCeConnection con = new SqlCeConnection(conString)) 
     { 
      con.Open(); 
      // Read in all values in the table. 
      using (SqlCeCommand com = new SqlCeCommand("SELECT * FROM testme", con)) 
      { 
       SqlCeDataReader reader = com.ExecuteReader(); 
       while (reader.Read()) 
       { 
        string num = reader[0].ToString(); 
        MessageBox.Show("hi"+num); 
       } 
      } 
      con.Close(); 
     } 
    } 

    private void button3_Click(object sender, EventArgs e) 
    { 

     string path = "c:\\ChekatyResources"; 
    try{ 

     if (!Directory.Exists(path)) 
     { 

     // Try to create the directory. 
      DirectoryInfo di = Directory.CreateDirectory(path); 
     MessageBox.Show("file is created"); 
     } 
     else { 

      MessageBox.Show("file is exist"); 

      } 
      } 
      catch (IOException ioex) 
      { 
    MessageBox.Show(ioex.Message); 
      } 

     } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     //string executable = System.Reflection.Assembly.GetExecutingAssembly().Location; 

     //string path = (System.IO.Path.GetDirectoryName(executable)); 
     //MessageBox.Show(path); 
     //File.WriteAllBytes("destination path",); 
     string paths = "c:\\"; 
     AppDomain.CurrentDomain.SetData("DataDirectory", paths); 

     string connStr = @"Data Source =c:\ChekatyResources\locally.sdf;"; 

     if (!File.Exists(@"c:\ChekatyResources\locally.sdf")) 
     { 

      SqlCeEngine engine = new SqlCeEngine(connStr); 
      engine.CreateDatabase(); 

      SqlCeConnection conn = null; 


      try 
      { 
       conn = new SqlCeConnection(connStr); 
       conn.Open(); 

       SqlCeCommand cmd = conn.CreateCommand(); 
       cmd.CommandText = "CREATE TABLE testme(id int, prenom ntext,nom ntext)"; 
       cmd.ExecuteNonQuery(); 
      } 
      catch 
      { 

      } 
      finally 
      { 
       conn.Close(); 
      } 
     } 
     else { MessageBox.Show("it's exist"); } 
    } 
} 

}

相關問題