Witam! Mam pewien problem z szybkim dodaniem wielu rekordów do bazy (plik .dbf).
Sytuacja wyglada tak, że mam obiekt DataTable i pustą bazę danych. Chcę wszystkie rekordy z DataTable dodać do bazy w możliwie krótkim czasie.
public void load(DataTable data)
{
DataSet ds = new DataSet();
string strAccessConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FolderPath + ";Extended Properties=dBASE IV;";
string strAccessSelect = "SELECT * FROM " + TableName;
OleDbConnection myAccessConn = null;
try
{
myAccessConn = new OleDbConnection(strAccessConn);
}
catch (Exception e){throw;}
OleDbDataAdapter myDataAdapter = null;
OleDbTransaction myTransaction = null;
try
{
OleDbCommand myAccessCommand = new OleDbCommand(strAccessSelect, myAccessConn);
myDataAdapter = new OleDbDataAdapter(myAccessCommand);
OleDbCommandBuilder custCB = new OleDbCommandBuilder(myDataAdapter);
myDataAdapter.InsertCommand=custCB.GetInsertCommand();
myDataAdapter.ContinueUpdateOnError=true;
myAccessConn.Open();
myDataAdapter.Fill(ds, TableName);
ds.Merge(data);
myTransaction = myAccessConn.BeginTransaction();
myDataAdapter.InsertCommand.Transaction = myTransaction;
myDataAdapter.Update(ds, TableName);
myTransaction.Commit();
}
catch (Exception ex){throw;}
finally
{
myAccessConn.Close();
}
}
Nie wiem dlaczego ale funkcja Update() trwa masakrycznie dużo czasu - dla 1 rekordu w tabeli to jest ok. 60 ms, dla 10 ok 600 ms.
Problem jest taki że docelowo ma być dodawane ponad 6000 rekordów, a w tym tempie to już kwestia minut.
Wiecie może dlaczego to działa tak wolno/ ew. jak to przyspieszyć?