How can the following code be modified to run my insert statements 100 at a time but also run if we don’t have 100 in total. Also it needs to be able to run the last few the over run the 100%. Having a very slow brain day today.
if (oleDataBaseConnection.HasRows())
{
int counter = 0;
Spinner spinner = new Spinner();
StringBuilder postgresQuery = new StringBuilder();
Dictionary<string, string> postgreSQLQueries = TypeConversion.GetQueryDictionary("POSTGRESQL");
while (oleDataBaseConnection.NextRecord())
{
string postgreSQLInsertQuery;
postgreSQLQueries.TryGetValue("INSERT", out postgreSQLInsertQuery);
postgreSQLInsertQuery = postgreSQLInsertQuery.Replace("{0}", tableName);
spinner.Turn();
postgresQuery.Append(postgreSQLInsertQuery);
postgresQuery.Append("(");
int columnCounter = 0;
//add a column parameter to query for each of our columns
foreach (KeyValuePair<string, string> t in destinationColumnData)
{
postgresQuery.Append(t.Key + ",");
columnCounter++;
}
postgresQuery = postgresQuery.Remove(postgresQuery.Length - 1, 1);
postgresQuery.Append(") ");
postgresQuery.Append("VALUES (");
//Loop through values for column names/types
for (int i = 0; i < columnCounter; i++)
{
if (String.IsNullOrEmpty(oleDataBaseConnection.GetFieldById(i)))
{
postgresQuery.Append("NULL, ");
}
else
{
switch (foobar[i].ToUpper())
{
case "TEXT":
postgresQuery.Append("$$" + oleDataBaseConnection.GetFieldById(i) + "$$, ");
break;
case "GEOMETRY":
postgresQuery.Append("ST_GeomFromText('" + oleDataBaseConnection.GetFieldById(i) + "'), ");
break;
default:
postgresQuery.Append(oleDataBaseConnection.GetFieldById(i) + ", ");
break;
}
}
}
postgresQuery = postgresQuery.Remove(postgresQuery.Length - 2, 2);
postgresQuery.Append(") ");
counter++;
//run 100 insert statements at a time
if (counter % 100 == 0)
{
postgresSQLDBConnection.PostgreSQLExecutePureSqlNonQuery(postgresQuery.ToString());
postgresQuery.Clear();
}
}
}
We know that all records have been inserted after the while loop is finished if the rest value of counter divided by 100 is 0. We therefore can also draw the conclusion that there are records that still need to be inserted if the rest value of the counter divided by 100 is not 0;
So add this part directly below the while loop: