2014-09-25 60 views
-1

我有一個存儲過程,它根據兩個不同的輸入返回2個結果集。調用SQL Server存儲過程在SQL Server中創建新的SP對象

如果我從不同的C#方法調用相同的存儲過程來檢索結果集,它是如何工作的?

它是作爲面向對象的概念嗎?就像我每次調用存儲過程時一樣,它是否在SQL Server &中創建新的存儲過程對象返回結果集?

+1

@fernandosfernandos如果有人發佈您認爲不符合要求的評論,那麼正確的做法是將其標記爲主持人關注。不以實物迴應。 – 2014-09-26 12:36:26

回答

3

簡短回答:不可以。

有沒有這樣的事情作爲「SP對象」。另外,從C#調用它不會影響答案。

在面向對象的日子之前,您可以將存儲過程想象得更像一個簡單的過程。 SQL Server中沒有包含狀態或其他任何內容的對象。你提供輸入,它給你一個結果,SP的代碼結束。此時,SQL服務器認爲請求已經完成,並在功能上忘記了請求已經完成。

現在,C#會將SP調用的結果包裝到一個SqlReader對象中 - 這是客戶端。原因是爲您的代碼提供更多的靈活性,例如能夠迭代datatable的行,或者獲取特定列的屬性。

但是,所有這些都發生在C#中,完全依賴於用於首先調用SP的框架。例如,LINQ和各種ORM可以將每一行自動轉換爲一個對象。

+0

謝謝。我還有一個問題,請告訴我SP如何同步執行。如果我像前面提到的那樣調用了我的2個方法,那麼sql服務器是否可以同步訪問SP,就像它將在其他人等待時一次執行一個過程調用一樣。 – 2014-09-26 03:47:05

+0

@fernandosfernandos:SQL Server是多線程的。所以多個程序可以同時運行。但是,sql查詢可能會導致鎖(表,頁或行),阻止其他進程修改甚至讀取特定數據,直到初始查詢完成。看到這個問題多一點信息:http://stackoverflow.com/questions/12608780/understanding-sql-server-locks-on-select-queries – NotMe 2014-09-26 13:26:40

+0

請。請注意,我從不同的線程同時調用同一個SP,使用不同的方法。 – 2014-09-26 14:10:23