ホームページ >バックエンド開発 >C++ >.NET/C# を使用して Access データベースへの高速一括挿入を実現するにはどうすればよいですか?

.NET/C# を使用して Access データベースへの高速一括挿入を実現するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-03 22:02:40792ブラウズ

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

.NET/C# でアクセスするための大量のレコードの書き込み (一括挿入)

問題: ADO.NET を使用して大規模なデータセットを Access データベースに保存するのは、

解決策:

DAO を使用すると、Access への一括挿入で ADO.NET よりも速度が大幅に向上します:

1 。フィールド変数を使用した DAO (2.8 秒):

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 (11.0 秒):

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 (17.0 秒):

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. INSERT ステートメントを使用した ADO.NET (79.0 秒):

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. DataTable と DataAdapter を使用する ADO.NET (86.0 秒):

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.オートメーション インポートによるテキスト ファイル (2.8 秒):

データをテキスト ファイルにエクスポートし、Access Automation を使用してインポートします (大規模なデータセットには推奨されません):

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;

以上が.NET/C# を使用して Access データベースへの高速一括挿入を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。