簡體   English   中英

ADO.NET SQL事務-僅1個對數據庫的調用?

[英]ADO.NET SQL Transaction - Only 1 call to database?

我正在查看一些代碼,該代碼使用存儲過程將一些數據插入MSSQL數據庫(MSSQL2014)。

每一行數據都會導致對該數據庫的調用。

顯然,由於多種原因,這種方法效率低下。 不僅如此,事實是必須通過網絡為每一行數據進行呼叫。

我猜想,如果它們只是將所有這些單獨的sqlcommand調用(ExecuteNonQuery)包裝到一個事務中,那么最終將導致某種“批處理插入”。 當您實際“提交”事務時,將在整個連接上進行調用。

這個對嗎? 這會在一次調用中將所有sqlcommand發送到服務器嗎? 我找不到能夠概述使用事務時客戶端和服務器之間的通信的圖表或文檔。

--> Begin Transaction

-> ExecuteNonQuery
-> ExecuteNonQuery
-> ExecuteNonQuery
-> ExecuteNonQuery
-> ExecuteNonQuery
-> ExecuteNonQuery
-> ExecuteNonQuery
-> ...

--> Commit Transaction (my assumption is that each of the SqlCommands 
    are sent over the connection object at this point)

在旁注中,我更傾向於建議開發人員重寫例程以使用SQLBulkCopy或TableValued參數。 但是,這將需要對數據庫存儲過程進行重構。

提前致謝

將沒有批量插入。 客戶端和服務器都不會跨語句優化。 ADO.NET沒有機制來理解您要發送的SQL。 它無法優化任何東西。 服務器可以但不能。

通過使用這種事務將獲得性能提升,因為只要事務掛起,插入就不需要刷新日志。

將沒有批量插入。 事務要做的就是使您能夠提交插入內容,以便其他人可以看到更改。 沒有性能提升,並且如果有任何性能下降。 不知道你想在這里做什么,很難給你一個正確的答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM