2017-07-27 96 views
-1

我有一個應該打開,編輯,創建和保存訪問數據庫的程序。爲了保存,我只複製一個空的數據庫(僅僅爲了避免創建每個表和列等的麻煩),並嘗試通過TableAdapterManager.UpdateAll方法填充值。C#從數據集填充訪問數據庫

string _TemplateConnectString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};"; 
_connection = new OleDbConnection(string.Format(_TemplateConnectString, dlg.FileName)); 
_connection.Open(); 

DataSet1TableAdapters.TableAdapterManager tam=new TableAdapterManager(); 
tam.Connection = _connection; 
try 
{ 
    tam.UpdateAll(dataset); 
} 
catch (System.Exception ex) 
{ 
    MessageBox.Show("Update failed"); 
} 

它完成,沒有例外,但值不插入到新的數據庫中。

據我所知,UpdateAll方法只更新修改後的行,所以如果我打開一些數據庫並插入它的行,即使數據庫中沒有我想要填充的數據,它也不會考慮它們。

我也試圖與ADODB和ADOX擴展但我發現這些解決方案填充數據庫被大量硬編碼的和層次結構,按鍵沒有問候等

有沒有辦法強制將所有內容插入新數據庫中?

回答

0

一個笨拙的解決方案,但它的工作原理。我重複數據集的表,並通過SQL字符串生成這樣保存:

void SaveTable(DataTable dt) 
    { 
     string[] inserts; 
     try 
     { 
      inserts = SqlHelper.GenerateInserts(dt, null, null, null); 

      foreach (string s in inserts) 
      { 
       OleDbCommand cmd = new OleDbCommand(); 
       cmd.CommandText = s; 
       cmd.Connection = _connection; 
       int n = cmd.ExecuteNonQuery(); 
      } 
     } 
     catch (Exception e) 
     { 
      SaveOk = false; 
     } 
    } 

我發現某處提供SQLHelper在這個網站,但完全失去了在那裏,unforunately。所以這裏是與它pastebin https://pastebin.com/iCMVuYyu

0

您的模板數據庫是否在Visual Studio項目目錄中?它可能有一些做與Visual Studio複製數據庫的bin/Debug或Bin /釋放文件夾...

+0

看起來像一個評論給我,而不是一個答案。 –

+0

是的我有一個emptydb.mdb文件與所有預設但空表。我不允許保存該文件的想法。只適用於名稱不同的數據庫 –

0

嘗試使用正確的數據源數據庫名,這裏的 例如使用Excel文件:

cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
     "Data Source=c:\somepath\ExcelFile.xls;" & _ 
     "Extended Properties=""Excel 8.0;HDR=Yes;"";" 
+0

但它是正確的。數據源是我打開的數據庫。連接打開狀態良好。這是下一個有問題的部分 –

+0

您可以僅插入一個示例數據,而不是整個數據集? – orgen