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
Lepaskan: 2025-01-03 22:02:40
asal
792 orang telah melayarinya

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();
}
Salin selepas log masuk

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();
}
Salin selepas log masuk

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();
}
Salin selepas log masuk

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();
}
Salin selepas log masuk

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);
Salin selepas log masuk

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;
Salin selepas log masuk

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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan