Heim > Backend-Entwicklung > C++ > Wie kann ich mit .NET/C# schnelle Masseneinfügungen in eine Access-Datenbank erreichen?

Wie kann ich mit .NET/C# schnelle Masseneinfügungen in eine Access-Datenbank erreichen?

Patricia Arquette
Freigeben: 2025-01-03 22:02:40
Original
779 Leute haben es durchsucht

How Can I Achieve Fast Bulk Inserts into an Access Database Using .NET/C#?

Schreiben einer großen Anzahl von Datensätzen (Masseneinfügung) für den Zugriff in .NET/C#

Problem:Einfügen eines großer Datensatz in eine Access-Datenbank mit ADO.NET ist zeitaufwändig.

Lösung:

Die Verwendung von DAO bietet erhebliche Geschwindigkeitsvorteile gegenüber ADO.NET für Masseneinfügungen in Access:

1 . DAO mit Feldvariablen (2,8 Sekunden):

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();
}
Nach dem Login kopieren

2. DAO mit Spaltenindex (11,0 Sekunden):

for (int i = 0; i < 100000; i++)
{
    rs.AddNew();
    for (int k = 0; k < 20; k++)
    {
        rs.Fields[k].Value = i + k;
    }
    rs.Update();
}
Nach dem Login kopieren

3. DAO unter Verwendung des Spaltennamens (17,0 Sekunden):

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();
}
Nach dem Login kopieren

4. ADO.NET mit INSERT-Anweisungen (79,0 Sekunden):

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();
}
Nach dem Login kopieren

5. ADO.NET mit DataTable und DataAdapter (86,0 Sekunden):

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);
Nach dem Login kopieren

6. Textdatei mit Automatisierungsimport (2,8 Sekunden):

Exportieren Sie Daten in eine Textdatei und verwenden Sie Access Automation, um sie zu importieren (nicht empfohlen für große Datensätze):

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;
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich mit .NET/C# schnelle Masseneinfügungen in eine Access-Datenbank erreichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage