在.NET/C# 中寫入大量記錄(批次插入)來存取
問題:插入使用使用使用使用ADO.NET 將大型資料集轉換為Access資料庫是
解決方案:
在批次插入Access 時,使用DAO 比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. ADO.NET 使用INSERT 語句(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. NET 使用DataTable 和DataAdapter(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中文網其他相關文章!