如何在c#和ASP.NET中处理多个连接?

如何在c#和ASP.NET中处理多个连接?,c#,sql,connection-string,sqlconnection,pool,C#,Sql,Connection String,Sqlconnection,Pool,这就是我连接的方式 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("

这就是我连接的方式

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();
但是服务器管理员说有很多连接

那么,我如何执行我的查询呢


如果不关闭连接会更好吗?

不,保持连接打开不会更好。使用“使用”命令管理系统资源

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();
}

以下是文档中的引用:

建议您在使用完连接后始终关闭连接,以便将连接返回到池中。这可以使用连接对象的Close或Dispose方法来完成。未显式关闭的连接可能不会添加或返回到池中。例如,已超出范围但尚未显式关闭的连接只有在达到最大池大小且连接仍然有效时才会返回到连接池

你可以像上面提到的马克一样使用“using”(我的偏好)。您还可以使用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();
    }
}

但是如果我有我写的代码,在一个方法中,例如publicstringexecutequery(stringquery){我在这里用sqlconnection写的代码}/*那么在一个方法中创建的sqlconnection只存在于这个方法中,当这个方法完成时它不就存在了吗?*/我知道在一个方法中创建的所有对象都只存在于这个方法中,当它完成在now内部创建的对象时,该对象就不存在了,但是sqlconnection发生了什么?如果您不调用Dispose或Close方法,该连接可能不会被添加或返回到池中。它与池的关系如何?连接字符串还需要一些值吗?池=真?或者类似的东西?您可以阅读有关连接池的内容。您不需要执行任何特定的操作来启用连接池(尽管您可以通过在连接字符串中设置pooling=false来禁用连接池)。