2009年3月12日 星期四

[C#] 在 Oracle 上一次執行多個 SQL 命令

一般在 ADO.NET 的批次處理部份,都是在 DataSet 進行離線的處理完後,透過 SqlDataAdapter(或是 OracleDataAdapter) 搭配 SqlCommandBuilder(或是 OracleCommandBuilder) 來做!

若是對同一個 table 進行大量的 insert,也可以改用 bind parameter array 的方式進行批次新增

但如果要處理的多個指令都不太一樣呢? 有 update、insert、delete 這時要怎麼辦?

每個 SQL 都要重新產生 connection 物件或是 command 物件真是成本太大了。因此,若是使用的資料庫為 Oracle (MS SQL Server 不確定能不能這樣做),可以將所有的 SQL 語法組合成以下的樣子:
BEGIN

第一個 SQL 命令;

第二個 SQL 命令;

第三個 SQL 命令;

.......

.......

END;

最後在 END 之後也是要補一個分號。

當所有 SQL 語法組合而成上面的格式後,就可以透過一個 command 與一個 connection 一次將 SQL 命令丟給資料庫去作囉!


參考資料

MSDN Library >> Performing Batch Operations Using DataAdapters (ADO.NET) (中文版)

ADO.Net實現Oracle大批量數據的更新優化 - 中國自學編程網

oracle 一次執行多個sql的問題 - 白虎的地盤 - CSDNBlog