You keep adding the same parameters to the cmd. I would clear them after you execute the query. Try changing your code to this
using (SqliteCommand cmd = con.CreateCommand())
{
cmd.CommandText = @"INSERT INTO ProductData (ProductId, ProductName, OrderDate, OrderNumber, Unused1, Unused2, DimReady)
VALUES (@productId, @productName, @orderDate, @orderNumber, @unused1, @unused2, @dimReady)";
for (int j = 0; j < _totalItems; j++)
{
cmd.Parameters.Add(new SqliteParameter("@productId", _dataFields[j][0]));
cmd.Parameters.Add(new SqliteParameter("@productName", _dataFields[j][1]));
cmd.Parameters.Add(new SqliteParameter("@orderDate", _dataFields[j][2]));
cmd.Parameters.Add(new SqliteParameter("@orderNumber", _dataFields[j][3]));
cmd.Parameters.Add(new SqliteParameter("@unused1", _dataFields[j][4]));
cmd.Parameters.Add(new SqliteParameter("@unused2", _dataFields[j][5]));
cmd.Parameters.Add(new SqliteParameter("@dimReady", _dataFields[j][6]));
cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
}
}