0

这就是我的连接方式

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

但服务器管理员说有很多连接。

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

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

4

3 回答 3

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();
}
于 2013-04-02T16:48:20.383 回答
0

这是文档中的引用:

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

于 2013-04-02T16:55:01.680 回答
0

您可以像上面提到的 Mark 一样使用“使用”(我的偏好)。您还可以使用 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();
    }
}
于 2013-04-02T17:06:32.423 回答