Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mencapai Sisipan Pukal Pantas ke dalam Pangkalan Data Akses Menggunakan .NET/C#?

Bagaimanakah Saya Boleh Mencapai Sisipan Pukal Pantas ke dalam Pangkalan Data Akses Menggunakan .NET/C#?

Patricia Arquette
Patricia Arquetteasal
2025-01-03 22:02:40776semak imbas

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

Menulis Sebilangan Besar Rekod (Sisip Pukal) untuk Diakses dalam .NET/C#

Masalah: Memasukkan a dataset besar ke dalam pangkalan data Access menggunakan ADO.NET adalah memakan masa.

Penyelesaian:

Menggunakan DAO menawarkan kelebihan kelajuan yang ketara berbanding ADO.NET untuk sisipan pukal ke dalam Access:

1 . DAO Menggunakan Pembolehubah Medan (2.8 Saat):

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 Menggunakan Indeks Lajur (11.0 Saat):

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 Menggunakan Nama Lajur (17.0 Saat):

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 Menggunakan Penyata INSERT (79.0 Saat):

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 Menggunakan Jadual Data dan Penyesuai Data (86.0 Saat):

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. Fail Teks dengan Import Automasi (2.8 Saat):

Eksport data ke fail teks dan gunakan Automasi Akses untuk mengimportnya (tidak disyorkan untuk set data yang besar):

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;

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencapai Sisipan Pukal Pantas ke dalam Pangkalan Data Akses Menggunakan .NET/C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn