2015-04-26 62 views
0

讓說,我有4 MySQL連接和connectString中(我離開啓用連接池,我使用MySQL .NET連接器從MySQL本身)使用相同連接字符串的連接會發生什麼?

protected internal MySqlConnection connection; 
protected internal MySqlConnection cnnct1,cnnct2,cnnct3; 
protected internal string connectString = "SERVER=" + addressBox.Text + ";DATABASE=" + dbNameBox.Text + ";UID=" + UserBox.Text + ";PASSWORD=" + PassBox.Text + ";"; 

然後我給你的連接

protected internal void connectionMaker() 
{ 
    connection = new MySqlConnection(connectString); 
    cnnct1 = new MySqlConnection(connectString); 
    cnnct2 = new MySqlConnection(connectString); 
    cnnct3 = new MySqlConnection(connectString); 
} 

我會用這些連接做什麼,因爲我的應用程序是多線程的,並且所有線程都需要同時訪問單個數據庫,所以我想給每個線程以不同的連接,但由於它們都訪問相同的數據庫,甚至同一個表,所以我認爲給每個連接相同的連接字符串。

用於添加每個線程將與上相同的列SELECT命令上在同一時間的單個表執行MySqlReader(通過任務並行Libary),但它們中的每將讀取不同行

我的問題是,我我試圖讓我的代碼儘可能簡單和容易,但這是一種安全,良好和正確的做法嗎?如果沒有,是否有任何簡單而安全的方法來做我將要做的事情?

+0

@YuvalItzchakov我認爲我的問題和你標記的問題確實有相似之處,但不相同,問題是提問者如何共享線程之間的連接,並且接受的答案表明每個線程都有單獨的連接,而我的問題是問是否有可能有不同的連接與相同的連接字符串?如果不是我能做什麼,因爲這些線程需要同時訪問同一個數據庫實例。 其實我在多次閱讀這個問題後提出了這個問題 –

回答

0

如果連接字符串相同,連接將使用相同的連接池。

最好的做法是每個線程創建,打開和關閉自己的連接,當可能的時候,框架將負責共享資源。

我建議你給看看這裏:https://msdn.microsoft.com/en-us/library/vstudio/8xx3tyca%28v=vs.100%29.aspx

當用戶調用打開一個連接上時,池會在池中的可用連接。如果有一個連接池可用,它將它返回給調用者而不是打開一個新的連接。當應用程序在連接上調用Close時,池會將其返回到活動連接的池集,而不是關閉它。一旦連接返回到池中,就可以在下次打開呼叫時重新使用該連接。

+1

由於這個參考MySQL而不是MSSql,所以回答的問題與此類似:https://stackoverflow.com/questions/19458633/how-to-share-a-一個MySQL連接之間的多線程 – SteveFerg

+0

是的,我已經分配每個線程有它自己的連接對象('MySqlConnection'),但由於那些線程真的需要訪問相同的數據庫,甚至相同的表在一個真正相同時間,是否可以創建具有相同連接字符串的新連接? –

+0

我覺得你很擔心這件事。只需將連接字符串保存在一個位置(配置文件),並根據需要打開和關閉儘可能多的連接。該框架將照顧聯營。 –