Here it is:
Public Shared Sub SQLite_ExecuteNonQuerys(ByVal table As DataTable)
If SQLite_Connect() = False Then
Return
End If
Dim adapter As New SQLiteDataAdapter()
adapter.SelectCommand = New SQLiteCommand(String.Format("SELECT * FROM {0}", table.TableName), SQLite_Connection)
Dim update As String = String.Format("UPDATE {0} SET ", table.TableName)
Dim insert_columns As String = ""
Dim insert_values As String = ""
Dim paramaters As New List(Of SQLiteParameter)
Dim key_index As Integer = -1
For i As Integer = 0 To (table.Columns.Count - 1) Step 1
If i <> (table.Columns.Count - 1) Then
update = update & String.Format("{0} = {1},", table.Columns(i).ColumnName, String.Format("@{0}", table.Columns(i).ColumnName))
insert_columns = insert_columns & String.Format("{0},", table.Columns(i).ColumnName)
insert_values = insert_values & String.Format("{0},", String.Format("@{0}", table.Columns(i).ColumnName))
Else
update = update & String.Format("{0} = {1}", table.Columns(i).ColumnName, String.Format("@{0}", table.Columns(i).ColumnName))
insert_columns = insert_columns & String.Format("{0}", table.Columns(i).ColumnName)
insert_values = insert_values & String.Format("{0}", String.Format("@{0}", table.Columns(i).ColumnName))
End If
paramaters.Add(New SQLiteParameter(String.Format("@{0}", table.Columns(i).ColumnName), table.Columns(i).ColumnName))
If table.Columns(i).Unique Then
key_index = i
End If
Next
Dim insert As String = String.Format("INSERT INTO {0} ({1}) VALUES ({2})", table.TableName, insert_columns, insert_values)
Dim delete As String = String.Format("DELETE FROM {0} ", table.TableName)
If key_index <> -1 Then
update = update & String.Format("WHERE {0} = {1}", table.Columns(key_index).ColumnName, String.Format("@{0}", table.Columns(key_index).ColumnName))
delete = delete & String.Format("WHERE {0} = {1}", table.Columns(key_index).ColumnName, String.Format("@{0}", table.Columns(key_index).ColumnName))
End If
adapter.UpdateCommand = New SQLiteCommand(update, SQLite_Connection)
adapter.InsertCommand = New SQLiteCommand(insert, SQLite_Connection)
adapter.DeleteCommand = New SQLiteCommand(delete, SQLite_Connection)
For i As Integer = 0 To (paramaters.Count - 1) Step 1
adapter.UpdateCommand.Parameters.Add(paramaters(i))
adapter.InsertCommand.Parameters.Add(paramaters(i))
adapter.DeleteCommand.Parameters.Add(paramaters(i))
Next
adapter.Update(table)
SQLite_Close()
End Sub
Problem is this line:
adapter.Update(table)
Takes close to an hour to execute with only 50,000 records to insert/update/delete.
I was wondering what is the easiest way to increase the speed of this methods execution? I was using DbTransaction but i could not figure out how to get it working with nothing but a DataTable as an argument, however DbTransaction could do the same thing in about 0.3 seconds.
So anyone have an answer to this?
Thanks a heap for any help.