sql进程如何表现?

时间:2013-03-15 07:22:43

标签: c# sql sql-server

从我的C#程序中,我打开sql连接并对表进行一些更新。之后我关闭连接。并且,如果我在Management Studio中的Activity Monitor下检查,则会创建New Process,即使我从程序中关闭了我的sql连接,该过程仍然存在于Activity Monitor中。我可以知道这个过程是如何表现的吗?我们需要明确地清除这些过程吗?谢谢。

2 个答案:

答案 0 :(得分:5)

我认为您在这里错误地使用了 process 的概念。

ADO.NET使用connection pool。这意味着当您在SqlConnection实例上调用Open方法时,您没有打开与数据库的新物理连接,而只是从现有池中绘制一个。当您调用Close时,您没有关闭连接,只需将其返回到连接池即可重复使用。

连接池位于应用程序的进程中,并且是每个连接字符串。

  

我们是否需要明确清除这些流程?

不,您所要做的就是确保在IDisposable语句中包装了所有using资源(例如连接和命令)。这样您甚至不需要显式调用Close方法,代码将确保即使在异常的情况下也能正确处理所有内容:

string connectionString = ...
using (var conn = new SqlConnection(connectionString))
using (var cmd = conn.CreateCommand())
{
    conn.Open();
    cmd.CommandText = "SELECT id FROM foo";
    using (var reader = cmd.ExecuteReader())
    {
        while (reader.Read())
        {
            int id = reader.GetInt32(reader.GetOrdinal("id"));
            Console.WriteLine(id);
        }
    }
}

答案 1 :(得分:0)

确保你处理连接,你最好的选择是使用() - 阻止。

using ( var con = new SqlConnection("???") )
{
   using ( var cmd = con.CreateCommand() )
   {
      // do SQL with cmd
   }
}