2010-04-13 39 views
1

帶有自動提交功能的插入是否可以確保對數據庫上的任何/每個SqlConnection立即可見,或者僅在其自己的SqlConnection上可見?自動提交和多個SqlConnections

我有3個SqlConnections的過程。 Connection One與一個驅動循環的SqlDataReader相關聯。通過循環,Connection Two用於獲取測試數據,Connection Three用於在表中插入行。插入自動提交。

我們遇到了測試(使用連接兩個數據)失敗的情況。一種可能的解釋是Connection Two有時看不到在前面的循環中通過Connection Three插入的行。這可能嗎?

我沒有看到兩個和三個相結合的問題,我打算這樣做,但我沒有任何辦法來強制發生這個錯誤,我想知道這是否解釋甚至是可能的。

+1

你有代碼示例顯示的問題? – BlackICE 2010-04-13 14:40:30

+0

我應該補充說,連接二和三是打開和關閉使用,所以連接三將關閉時,可疑的數據被檢索兩個。 – SeaDrive 2010-04-13 14:42:42

+0

re:示例代碼。原文在這裏張貼的時間太長了,我不認爲需要在第一段中回答這個問題。 – SeaDrive 2010-04-13 14:51:34

回答

2

是的,自動提交,刀片是相同的任何其他承諾插入並將於其他連接可見。

然而,插入行不會改變通過已經存在的SqlDataReader返回的行,因爲SqlDataReader對象封裝一個記錄集 - 在結果的查詢的 - 而不是查詢本身。

我不確定你的「連接二」在做什麼,但是如果它取決於INSERT的結果,C3對SqlDataReader可見,那麼它肯定會因爲這個原因而失敗。

0

這是你在做什麼?

  1. 您可以使用打開一個SQLDataReader來獲取數據,然後通過它進行循環。
  2. 在這個循環中,你插入一條記錄,你然後通過在讀寫器中的select語句的期望。
  3. 由於數據已被選中,您不會在循環中看到它。
+0

讓我把這樣的: 我有一些事務要處理。每個賬戶有多個交易。每年都有一個限額,所以一旦達到限額,交易就不會被處理。 我使用Connection One和SqlDataReader循環處理事務。在循環中,我使用Connection Two上的select語句查找當前總數。如果總數仍低於限制,我使用連接三插入一行。 如果是同一賬戶,總帶回選擇應該(通常如此)包括插在以前的一次循環的行。 – SeaDrive 2010-04-13 14:58:25

+0

@SeaDrive - 在這種情況下,您確定插入始終按預期啓動嗎? – Paddy 2010-04-13 15:13:06

+0

行總是在那裏。考慮到Aaronaught的第一句話是正確的,我必須尋找其他地方的錯誤。我有一個備選假設,它必須處理帶回運行總數的函數。 – SeaDrive 2010-04-13 15:23:56