2012-09-12 65 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

回答