J'essaye d'écrire l'application Windows pour obtenir des données à partir de Fox Pro DB, et l'insérer dans Sql Server 2008 db.insérer des données à la base de données dans la performance de la boucle
J'ai écrit du code, mais cela fonctionne très lentement. rowsCount plus de 1 million Mon code ci-dessous:
OleDbConnection cn = new OleDbConnection(foxProConnectionString);
SqlConnection cSql = new SqlConnection(sqlServerConnectionString);
cSql.Open();
OleDbCommand ocmd = new OleDbCommand("Select * from " + table, cn);
OleDbDataAdapter sda = new OleDbDataAdapter(ocmd);
DataTable dt = new DataTable();
sda.Fill(dt);
SqlCommand mySqlcmd = new SqlCommand();
mySqlcmd.Connection = cSql;
for (int i = 0; i < dt.Rows.Count; i++)
{
mySqlcmd.CommandText = "INSERT INTO sqlTable (column1, column2, column3) VALUES ("+dt.Rows[i][dt.Columns.IndexOf("column1")] + ",'"
+ DoOper1(dt.Rows[i]dt.Columns.IndexOf("column2")]) + "','"
+ dt.Rows[i][dt.Columns.IndexOf("column3")] + "')";
mySqlcmd.ExecuteNonQuery();
}
Je ne peux pas utiliser la copie en bloc, les colonnes de base de données peut être différente l'ordre dans certaines tables source. Aussi j'obtiens l'erreur:
The CLR has been unable to transition from COM context 0x54afe8 to COM context 0x54b158 for 60 seconds. The thread that owns the destination context/apartment is most likely either doing a non pumping wait or processing a very long running operation without pumping Windows messages. This situation generally has a negative performance impact and may even lead to the application becoming non responsive or memory usage accumulating continually over time. To avoid this problem, all single threaded apartment (STA) threads should use pumping wait primitives (such as CoWaitForMultipleHandles) and routinely pump messages during long running operations.
comment puis-je résoudre un ensemble de mon problème?
Quelle est la lenteur de la lenteur? Par exemple, l'exécution de sql pour mettre à jour la colonne de mot de passe dans notre table d'utilisateurs de 25 millions d'enregistrements a pris environ 12 heures. –
Supprimez tous vos index et contraintes de cette table et restaurez-les après le chargement des données. – Rup
obtenir des données à partir de l'opération foxPro et insérer l'opération environ 1 million de lignes prend environ 3 minutes. – loviji