2013-04-02 29 views
0

這是我做我的連接如何在c#和ASP.NET中使用很多連接?

SqlConnection conn = new SqlConnection(connectionstring); 
conn.open(); 

SqlCommand comando = new SqlCommand(/*my query update/delete/insert/select o execute sp*/,conn); 
comando.Parameters.Add("@parameter1","value1") 
comando.Parameters.Add("@parameter2","value2") 
comando.Parameters.Add("@parameterN","valueN") 
comando.ExecuteNonQuery() 

conn.close(); 

但服務器管理員說,有許多連接。

然後,我怎麼能執行我的查詢?

它會更好,如果我不關閉連接?

回答

2

不,這不會是更好地保持連接開放。使用「使用」命令來管理系統資源。

using(SqlConnection conn = new SqlConnection(stringconection)) 
{ 
    conn.Open(); 
    SqlCommand comando = new SqlCommand(/*my query update/delete/insert/select o execute sp*/,conn); 
    comando.Parameters.Add("@parameter1","value1"); 
    comando.Parameters.Add("@parameter2","value2"); 
    comando.Parameters.Add("@parameterN","valueN"); 
    comando.ExecuteNonQuery(); 
} 
+0

但如果我有我寫了,在方法例如公共字符串的executeQuery(串查詢)的代碼{代碼我寫了的SqlConnection這裏}/*然後其在方法創建SqlConnection存在只有在此方法中,沒有它讓超過現有方法的時候結束?*/ – angel

+0

我只知道那裏存在,在方法內部創建的所有對象時,它完成現在裏面那麼不存在創建的對象,而是用的SqlConnection發生了什麼? – angel

+0

如果您不調用Dispose或Close方法,則可能不會將連接添加或返回到池中。 –

0

下面是從文檔報價:

建議你總是使用它關閉連接當您完成,以便使連接返回到池中。這可以通過使用Connection對象的Close或Dispose方法來完成。未明確關閉的連接可能不會被添加或返回到池中。例如,如果已達到最大池大小並且連接仍然有效,那麼超出範圍但尚未明確關閉的連接將僅返回到連接池。

0

您可以使用「使用」像馬克上述(我的偏好)。你也可以使用try-catch-finally塊。

try 
{ 
    SqlConnection conn = new SqlConnection(stringconection); 

    conn.Open(); 

    SqlCommand comando = new SqlCommand(/*my query update/delete/insert/select o execute sp*/,conn); 
    comando.Parameters.Add("@parameter1","value1"); 
    comando.Parameters.Add("@parameter2","value2"); 
    comando.Parameters.Add("@parameterN","valueN"); 
    comando.ExecuteNonQuery(); 
} 
catch(Exception ex) 
{ 
    // catch exceptions here 
} 
finally 
{ 
    if(comando != null) 
    { 
     comando.Dispose(); 
    } 
    if(conn != null) 
    { 
     conn.Dispose(); 
    } 
} 
相關問題