Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# sql进程是如何运行的?_C#_Sql_Sql Server - Fatal编程技术网

C# sql进程是如何运行的?

C# sql进程是如何运行的?,c#,sql,sql-server,C#,Sql,Sql Server,从我的C#程序中,我打开sql连接并对表进行一些更新。之后,我关闭连接。而且,如果我在ManagementStudio中的ActivityMonitor下进行检查,就会创建新的进程,即使我关闭了程序中的sql连接,该进程仍在ActivityMonitor中。我可以知道这个过程是如何进行的吗?我们是否需要明确地清除这些流程?谢谢 我认为您在这里错误地使用了过程的概念 ADO.NET使用。这意味着,当您在SqlConnection实例上调用Open方法时,您并不是在打开与数据库的新物理连接,而是在现

从我的C#程序中,我打开sql连接并对表进行一些更新。之后,我关闭连接。而且,如果我在ManagementStudio中的ActivityMonitor下进行检查,就会创建新的进程,即使我关闭了程序中的sql连接,该进程仍在ActivityMonitor中。我可以知道这个过程是如何进行的吗?我们是否需要明确地清除这些流程?谢谢

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

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

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

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

不,您所要做的就是确保使用语句将所有
IDisposable
资源(如连接和命令)包装在
中。这样,您甚至不需要显式调用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);
        }
    }
}

请确保释放连接,最好是使用()块


谢谢。在使用中是否需要使用命令obj和读卡器对象?将连接ojb放入使用块就足够了?我看到了这个链接。根据这一点,这是必要的是的,这是必要的,正如我的回答所示。您正在操作并实现
IDisposable
接口的每个类都必须使用
语句包装在
中。我使用的是sql server 2008
using ( var con = new SqlConnection("???") )
{
   using ( var cmd = con.CreateCommand() )
   {
      // do SQL with cmd
   }
}