2012-09-12 68 views
3

我有一個問題在C#windows程序即我不能使用2數據庫那些是 簡單的數據庫在表和數據。在這個項目中,我想要打開訪問數據庫使用另一個名稱創建新的訪問數據庫具有相同的表和列和行並填充源數據庫中的源數據。創建新的數據庫並填充另一個數據庫

我無法讀取源數據庫並插入到新的目標數據庫中。下面的代碼請幫助我完成這個項目,非常感謝。

private void button3_Click(object sender, EventArgs e) 
{ 
    OleDbConnection cn = new OleDbConnection(); 
    cn.ConnectionString = @"provider=Microsoft.ACE.OLEDB.12.0;" + @"data source=" + openFileDialog1.FileName; 
    OleDbCommand cmd = new OleDbCommand(); 
    cn.Open(); 
    DataTable table = cn.GetSchema("Tables"); 

    int i = 0; 
    foreach (System.Data.DataRow row in table.Rows) 
    { 
     if ((string)row["TABLE_TYPE"] == "TABLE") 
     { 
      comboBox1.Items.Add(row["TABLE_NAME"]); 
      Tables[i] = row["TABLE_NAME"].ToString(); 
      listBox1.Items.Add(Tables[i]); 
      i++; 
      n++; 
     } 
    } 
} 
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    OleDbConnection conne = new OleDbConnection(); 
    conne.ConnectionString = @"provider=Microsoft.ACE.OLEDB.12.0;" + @"data source=" + openFileDialog1.FileName; 
    conne.Open(); 
    OleDbCommand cmd = new OleDbCommand(); 
    cmd.Connection = conne; 
    DataTable Dt = new DataTable(); 
    cmd.CommandText = "select * from " + comboBox1.Text; 
    OleDbDataAdapter adapter = new OleDbDataAdapter(); 
    adapter.SelectCommand = cmd; 
    adapter.Fill(Dt); 
    dataGridView1.DataSource = Dt; 
    dataGridView1.Visible = true; 
    conne.Close(); 
} 
private void button2_Click(object sender, EventArgs e) 
{ 
    saveFileDialog1.Filter = "accdb|*.accdb"; 
    saveFileDialog1.Title = "Save Access DataBase File"; 
    saveFileDialog1.FileName = strFileName; 
    saveFileDialog1.ShowDialog(); 
    System.IO.File.Copy(openFileDialog1.FileName, saveFileDialog1.FileName); 

    ADOX.Catalog cat = new ADOX.Catalog(); 
    cat.Create("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + saveFileDialog1.FileName); 
    Console.WriteLine("Database Created Successfully"); 
    OleDbConnection connsave = new OleDbConnection(); 
    connsave.ConnectionString = @"provider=Microsoft.ACE.OLEDB.12.0;" + @"data source=" + saveFileDialog1.FileName; 
    connsave.Open(); 
    OleDbCommand cmdsave = new OleDbCommand(); 
    cmdsave.Connection = connsave; 

    OleDbConnection connopen = new OleDbConnection(); 
    connopen.ConnectionString = @"provider=Microsoft.ACE.OLEDB.12.0;" + @"data source=" + openFileDialog1.FileName; 
    connopen.Open(); 
    OleDbCommand cmdopen = new OleDbCommand(); 
    cmdopen.Connection = connopen; 

    int i = 0; 

    foreach (string strtablename in Tables) 
    { 
     if (i < n) 
     { 
      cmdsave.CommandText = "CREATE TABLE [" + Tables[i] + "]"; 
      cmdsave.ExecuteNonQuery(); 
      cmdsave.CommandText = "DELETE FROM [" + Tables[i] + "]"; 
      cmdsave.ExecuteNonQuery(); 
      cmdopen.CommandText = "SELECT * FROM [" + Tables[i] + "]"; 
      cmdopen.ExecuteNonQuery(); 
      cmdsave.CommandText = "INSErT INTO [" + Tables[i] + "]"; 
      cmdsave.ExecuteNonQuery();      
      i++; 
     } 
    } 
    connopen.Close(); 
    connsave.Close(); 
    textBox2.Text = saveFileDialog1.FileName.ToString(); 
    MessageBox.Show("DataBase Save Sucessfull in \"" + textBox2.Text + "\""); 
} 
+0

MS Access是基於文件。爲什麼不復制文件? – Fionnuala

+0

這個項目應該只使用SQL語句的例子SELECT,INSERT,... –

+0

爲什麼? File.Move是C#中的一行代碼。 – Arran

回答