2011-05-04 21 views
2

我正在開發一個我在IIS服務器上託管的asp.net應用程序。打開一個連接使用:我應該在哪裏放置數據庫連接字符串,以及如何處理連接池?

SqlConnection con = new SqlConnection("Server = INLD50045747A\\SQLEXPRESS; 
Database = MyDatabase;User ID = sa; Password = Welcome1; Trusted_Connection = False;"); 
con.Open(); 

是否有可能在一些地方保存此連接字符串,這樣我就不需要寫在每一個aspx.cs文件?我正在使用MSSQL數據庫。

我面對它說的一個問題:之前從池中獲取連接

超時時間已過。出現這種情況可能是因爲所有池連接使用,最大池大小達到

我讀的地方它要求我增加最大連接池100,是否會影響我的應用程序的性能?

回答

4

您可能沒有關閉您的開放式連接。

增加「池大小」就像在瀑布下面放一個大桶 - 它會幫助,但幾乎沒有。

嘗試並找到其中的地區像這種情況正在發生:

con.Open(); 

確保,如果它不是在一個try/catch,它是在一個,而且它包括finally語句。

try { 
    con.Open(); 
    //several other data base releated 
    //activities 
} catch (Exception ex) { 
    // do something 
} finally { 
    con.Close(); 
} 

此外,爲了避免使用finally塊,你可以換行的SqlConnection在using語句。

using (SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["yourKey"].ConnectionString)) 
     { 

      // write your code here 

     } 

大約在連接字符串針對您的問題,是

<connectionStrings> 
<add name="name" connectionString="Data Source=;Initial Catalog=;User ID=sa;password=;Persist Security Info=True;Connection TimeOut=20; Pooling=true;Max Pool Size=500;Min Pool Size=1" providerName="System.Data.SqlClient"/> 
</connectionStrings> 
+0

但爲什麼你需要保持con.open();在嘗試塊?是不是它enuf保持con.Close();在最後阻止? – scooby 2011-05-04 05:13:22

+1

當然。我通常將所有可能失敗的東西放在try塊中。 – 2011-05-04 05:19:19

2

將連接字符串存儲在web.config文件中。你可以找到很多例子。檢查這個屬性。 http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring%28v=vs.71%29.aspx

感謝 桑卡

+0

如果我在web.config文件中寫入連接字符串,那麼我如何打開每個aspx.cs文件的連接?只需寫con.open()? – scooby 2011-05-04 05:11:27

+0

@anargha,看到我的答案。 – kobe 2011-05-04 05:14:19

+0

@Sankar:總是希望在回答中編寫代碼並提供鏈接。它會更有幫助。 – 2011-05-04 10:52:03

4

它儲存在web.config文件,在connectionStrings部分:

<connectionStrings> 
    <add name="name" 
     connectionString="Data Source=;Initial Catalog=;User ID=sa;password=;Persist Security Info=True;Connection TimeOut=20; Pooling=true;Max Pool Size=500;Min Pool Size=1" 
     providerName="System.Data.SqlClient"/> 
</connectionStrings> 

然後你就可以訪問此在你的代碼...

ConfigurationManager.ConnectionStrings["name"].ConnectionString 
+0

您需要使用:'ConfigurationManager.ConnectionStrings [「name」] .ConnectionString'來獲取實際的連接字符串值。 – 2011-05-04 05:27:22

+0

@mar_s;感謝您的更正,並讓我更新它。 – 2011-05-04 05:29:25

3

了可以使用它也存儲在您的web.config

它會自動銷燬對象

如果你使用「使用」,則不需要con。關閉所有

using (SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["yourKey"].ConnectionString)) 
     { 

    // write your code here 

     } 
1

使用這兩種

try 
{ 
con.Open(); 
} 
catch(Exception ex) 
{ 
if(con.State== ConnectionState.Open) 
con.Close(); 
} 
finally 
{ 
con.Close(); 
} 

的幫助,也可以添加在連接字符串中Web.Config中,配置下。這會幫助你。

1

是的,將其存儲在web.config文件中,但要確保如果有錯誤,它不會向用戶顯示web.config文件的內容(因此向世界顯示您的密碼。)

如果您在很多應用程序中使用相同的連接字符串,則可以考慮編寫一個服務來提供連接字符串,這樣您只需在一個位置更改它們即可。

0

最好的選擇是使用鍵入的設置。

打開您的項目屬性。
轉到設置選項卡。
添加新的設置,例如MainConnectionString,選擇設置類型(ConnectionString)。在該值中插入連接字符串或點擊「...」按鈕以創建連接字符串的對話框。

現在,你可以參考你的連接字符串中的代碼是這樣的:

Settings.Default.MainConnectionString

如果你打開你的配置文件,你會看到

<configuration> 
    <connectionStrings> 
     <add name="WebApplication1.Properties.Settings.MainConnectionString" 
      connectionString="Data Source=localhost;Initial Catalog=AdventureWorks;Integrated Security=True" 
      providerName="System.Data.SqlClient" /> 
    </connectionStrings> 

您可以指定該連接字符串 :

  • for one web sit e在它自己的web.config中。
  • 對於一組網站
  • 對於一個框上的所有網站:在機器範圍web.config中。
  • 對於一個盒子上的所有應用程序:在machine.config中。

如果您有很多應用程序連接到相同的數據庫並安裝在一個盒子上,這可能很方便。如果數據庫位置發生更改,則只更新一個文件machine.config,而不是轉到每個應用程序的配置文件。

相關問題