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
Patricia ArquetteOriginal
2025-01-03 22:02:40767Durchsuche

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();
}

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();
}

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();
}

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();
}

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);

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;

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!

Stellungnahme:
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