Maison >développement back-end >C++ >Comment puis-je réaliser des insertions groupées rapides dans une base de données Access à l'aide de .NET/C# ?
Écriture d'un grand nombre d'enregistrements (insertion groupée) pour accéder dans .NET/C#
Problème : Insertion d'un un grand ensemble de données dans une base de données Access à l'aide d'ADO.NET est prend du temps.
Solution :
L'utilisation de DAO offre des avantages de vitesse significatifs par rapport à ADO.NET pour les insertions groupées dans Access :
1 . DAO utilisant des variables de champ (2,8 secondes) :
DAO.Field[] myFields = new DAO.Field[20]; for (int k = 0; k < 20; k++) myFields[k] = rs.Fields["Field" + (k + 1).ToString()]; for (int i = 0; i < 100000; i++) { rs.AddNew(); for (int k = 0; k < 20; k++) { myFields[k].Value = i + k; } rs.Update(); }
2. DAO utilisant l'index de colonne (11,0 secondes) :
for (int i = 0; i < 100000; i++) { rs.AddNew(); for (int k = 0; k < 20; k++) { rs.Fields[k].Value = i + k; } rs.Update(); }
3. DAO utilisant le nom de la colonne (17,0 secondes) :
for (int i = 0; i < 100000; i++) { rs.AddNew(); for (int k = 0; k < 20; k++) { rs.Fields["Field" + (k + 1).ToString()].Value = i + k; } rs.Update(); }
4. ADO.NET utilisant les instructions INSERT (79,0 secondes) :
for (int i = 0; i < 100000; i++) { StringBuilder insertSQL = new StringBuilder("INSERT INTO TEMP (") .Append(names) .Append(") VALUES ("); for (int k = 0; k < 19; k++) { insertSQL.Append(i + k).Append(","); } insertSQL.Append(i + 19).Append(")"); cmd.CommandText = insertSQL.ToString(); cmd.ExecuteNonQuery(); }
5. ADO.NET utilisant DataTable et DataAdapter (86,0 secondes) :
for (int i = 0; i < 100000; i++) { DataRow dr = dt.NewRow(); for (int k = 0; k < 20; k++) { dr["Field" + (k + 1).ToString()] = i + k; } dt.Rows.Add(dr); } da.Update(dt);
6. Fichier texte avec importation d'automatisation (2,8 secondes) :
Exportez les données vers un fichier texte et utilisez Access Automation pour les importer (non recommandé pour les grands ensembles de données) :
StreamWriter sw = new StreamWriter(Properties.Settings.Default.TEMPPathLocation); for (int i = 0; i < 100000; i++) { for (int k = 0; k < 19; k++) { sw.Write(i + k); sw.Write(","); } sw.WriteLine(i + 19); } sw.Close(); ACCESS.Application accApplication = new ACCESS.Application(); accApplication.OpenCurrentDatabase(databaseName, false, ""); accApplication.DoCmd.RunSQL("DELETE FROM TEMP"); accApplication.DoCmd.TransferText(TransferType: ACCESS.AcTextTransferType.acImportDelim, TableName: "TEMP", FileName: Properties.Settings.Default.TEMPPathLocation, HasFieldNames: true); accApplication.CloseCurrentDatabase(); accApplication.Quit(); accApplication = null;
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!