创建单个或多个SQL连接以多次执行相同查询是否更好?

时间:2016-09-15 10:06:04

标签: sql asp.net sql-server database-connection webmethod

我每2秒执行一次相同的命令。我认为以下代码会创建多个连接:

[System.Web.Services.WebMethod]
public static int getActivity()
{
    using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["dbconnection"].ToString()))
    {
        connection.Open();
        using (var cmd = new SqlCommand("SELECT TOP 1 ValueX FROM TABLE WHERE ID= 2 AND EVENTID = 2 ORDER BY DATE DESC", connection))
        {
            var x = cmd.ExecuteScalar();
            int Result;

            if (x != null)
            {
                Result = int.Parse(x.ToString());
                Console.WriteLine("USER ACTIVITY : " + Result);
            }
            else
            {
                Result = -999;
            }
            connection.Close();
            return Result;
        }
    }
}

如果我多次调用此方法以下代码是进行多连接还是单连接?

 using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["dbconnection"].ToString()))

有人可以解释我是否需要修改此代码或这是一个好的吗?

感谢。

2 个答案:

答案 0 :(得分:2)

由于您使用的是using statement子句,因此一旦完成该方法,就会释放资源并关闭连接。因此,每次调用相同的方法时,都会建立新的连接。当您使用using子句时,它等同于以下代码:

listr=[]        
for number in range(96):
    listr.append(number)

另请注意,您无需在方法中明确调用listr = range(96) # in Python2 # or listr = list(range(96)) # in Python3 ,因为SqlConnection connection = null; try { connection = new SqlConnection(connectionString); } finally { if(connection != null) ((IDisposable)connection).Dispose(); } 语句会处理它。

答案 1 :(得分:0)

你的方法很好,你只需要Rahul所描述的connection.Close()。处理SQL对象时的Using语句是一种很好的做法。

您应该记住的是,ADO.NET连接池负责处理引用相同连接字符串的新对象,从而最大限度地缩短打开连接所需的时间。

有关connection pooling的更多信息,请Here