2012-08-09 60 views
0

我工作的Windows應用程序使用Microsoft Access作爲數據庫與oldedb數據提供程序。 在這個項目中,我用來導入xml文件並將數據寫入數據庫。 我想做批量插入,而不是一次插入一條記錄。 所以我試着用DAO計算策略,但有時結束了像最佳實踐批量插入到Acces數據庫在c#

例外「目前鎖定無法更新」

這裏是我使用的代碼。

using TEST = Microsoft.Office.Interop.Access.Dao; 

Pubic void Insert() 
{ 

     string sBaseDirectory = (AppDomain.CurrentDomain.BaseDirectory).ToString(); 
      string sODBPath = sBaseDirectory + @"\TEST.accdb"; 
      TEST.DBEngine dbEngine = new TESt.DBEngine(); 
      TEST.Database db = dbEngine.OpenDatabase(sODBPath); 
      TEST.Recordset rsTest = db.OpenRecordset("dtTest"); 
     for(int i=0;i<1000;i++) 
       { 
        rsTest.AddNew(); 
        rsTest.Fields["ID"].Value =i; 
        rsTest.Fields["Name"].Value ="Test"; 
        rsTest.update(); 

       } 
     rsTest.close(); 
     db.close(); 

} 

隨着Oldedb:

DataTable dt = new DataTable(); 
    dt.Columns.Add("ID", typeof(int)); 
    dt.Columns.Add("Name", typeof(string)); 

    string TableSQl = "Select * from dtTest where ID=0"; 
    OleDbDataAdapter dataAdapter=new OleDbDataAdapter(TableSQl,ConnectionString); 
    dataAdapter.InsertCommand = new OleDbCommand(INSERT); 
    OleDbConnection OleConn = new OleDbConnection(ConnectionString); 

     for(int i=0;i<1000;i++) 
     { 
      dataAdapter.InsertCommand.Parameters.Add("ID", OleDbType.BigInt, 8,i.ToString()); 
      dataAdapter.InsertCommand.Parameters.Add("Name", OleDbType.BigInt, 8, "test");    
    } 

    dataAdapter.InsertCommand.Connection = OleConn; 
    dataAdapter.InsertCommand.Connection.Open(); 
    dataAdapter.update(dt);   
    dataAdapter.InsertCommand.Connection.Close(); 

這裏它不是在表中插入的記錄。

請指導這個代碼有什麼問題以及好的方法。

+0

在第二個示例中,您添加了1000個名爲'Id'的參數和1000個名爲'Name'的參數。你不應該只添加參數一次,然後將記錄插入到DataTable中? – stuartd 2012-08-09 10:01:22

+0

這僅僅是一個例子。最終我的意圖是如何一次插入1000條記錄。 – Ram 2012-08-10 09:45:45

回答

0

http://msdn.microsoft.com/en-us/library/bbw6zyha(v=vs.80).aspx - 「使用參數與一個DataAdapter」

參數集合的Add方法採用 參數的名稱,DataAdapter的具體類型,大小(如果適用於 類型)和來自DataTable的SourceColumn的名稱。

因此,您需要正確創建參數,填充DataTable,然後調用Update。

是否有任何文件表明這種方法會批量插入,而不是一次一個地完成它們?