2013-07-29 123 views
1

我懷疑Pooling實際上是否適用於vb.net。 我用下面的查詢來檢查來自不同pc的數據庫的連接。池:連接到數據庫的多個連接

SELECT hostname,p.status,[program_name],loginame,name 
FROM Master..sysprocesses as p join master.dbo.sysdatabases as d on p.dbID = d.dbID 
WHERE p.ecid=0 and p.hostname<>'' 
order by name 

在輸出中,我看到多個連接從pc到同一個數據庫。

所以我對此有疑問。在我的vb.net應用程序中,我只打開一次連接,所以我想連接將會從同一個池中使用,因此只有一個打開的連接到PC上的數據庫。

UPDATE

我有一個vb.net應用程序,它利用連接到SQL Server數據庫。

  1. 如果我打開同一個程序的多個實例,那麼連接將來自同一個池或不同的池?

  2. 如果我們打開不同的exe文件,但同時打開兩個連接到相同的數據庫,那麼這兩個連接池都將使用相同的連接池?

當我們在SQL服務器上運行查詢時,許多連接都顯示爲來自同一臺PC的同一個數據庫。

+0

可以有一個連接,但由sql server產生多個SPID。你確定你不是指由sql server產生的多個線程作爲多個連接嗎?你可以發佈截圖,以便我們可以幫助你更好嗎? – Kin

+0

@Kin我沒有得到你。你指的是哪個截圖? –

+0

你能描述一下你所指的嗎?在輸出中,我看到了多臺連接從一臺電腦到同一個數據庫。 – Kin

回答

1

池並不保證單個連接。對於每個同時活動(邏輯)連接,您需要一個物理連接。所以如果你有10個線程,每個線程都使用一個連接實例,或者出於某種原因,在單個線程上打開10個連接,你會看到10個物理連接。

將單個會話分配給單個連接。每個連接最多可以同時有一個會話。

+0

請參閱我更新的問題 –

+0

不同的進程不會共享連接。不管它是否與「exe」相同都與問題無關。操作系統只關心進程。 – usr

+0

然後,連接到相同數據庫的連接在同一個線程中多次打開時是否有用?如果我們打開一個單獨的線程並打開連接到同一個數據庫(即在多個線程中使用池),會發生什麼? –