Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.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/1/asp.net/30.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#_Asp.net_Sql - Fatal编程技术网

C# 启动和关闭SQL连接-在开始和结束时,还是在每次需要时?

C# 启动和关闭SQL连接-在开始和结束时,还是在每次需要时?,c#,asp.net,sql,C#,Asp.net,Sql,我正在用ASP.Net用C#制作一个web应用程序,并使用SQL数据库。在我看到的指南(关于SqlConnection和SqlCommand)中,每次发送查询时,它们都会打开和关闭SQL连接。但我不确定这是否是处理连接的最佳方式,因为我还学习了一些PHP,据我所知,在PHP中,一开始只打开一次连接。那么,处理连接的最佳方式是什么呢?对于web请求的长度,通常应该有一个连接和一个事务 如果有两个连接,则可能存在不一致的数据。e、 在第一次查询中,您检查银行余额,然后关闭它。然后在余额中添加5美元,

我正在用ASP.Net用C#制作一个web应用程序,并使用SQL数据库。在我看到的指南(关于SqlConnection和SqlCommand)中,每次发送查询时,它们都会打开和关闭SQL连接。但我不确定这是否是处理连接的最佳方式,因为我还学习了一些PHP,据我所知,在PHP中,一开始只打开一次连接。那么,处理连接的最佳方式是什么呢?

对于web请求的长度,通常应该有一个连接和一个事务

如果有两个连接,则可能存在不一致的数据。e、 在第一次查询中,您检查银行余额,然后关闭它。然后在余额中添加5美元,并在下一次连接中保存。如果其他人在两个连接之间添加了5美元怎么办?它会丢失的

最简单的方法是打开连接global.asax BeginRequest并将其保存到HttpContext中。无论何时需要连接,都要从那里拔出。请确保您已关闭EndRequest中的连接

另外,请阅读此处有关连接池的内容:
重复打开和关闭连接并不“昂贵”,前提是每次用户名相同。

对于web请求的长度,通常应该有一个连接和一个事务

如果有两个连接,则可能存在不一致的数据。e、 在第一次查询中,您检查银行余额,然后关闭它。然后在余额中添加5美元,并在下一次连接中保存。如果其他人在两个连接之间添加了5美元怎么办?它会丢失的

最简单的方法是打开连接global.asax BeginRequest并将其保存到HttpContext中。无论何时需要连接,都要从那里拔出。请确保您已关闭EndRequest中的连接

另外,请阅读此处有关连接池的内容:
重复打开和关闭连接并不“昂贵”,只要每次的用户名都相同。

在.NET中,通常的做法是打开一个SqlConnection并使用SqlCommand,然后处理这两个连接

using(SqlConnection connection = new SqlConnection("myConnectionString"))
{
    using(SqlCommand command = new SqlCommand("dbo.SomeProc"))
    {
        // Execute the command, when the code leaves the using block, each is disposed
    }
}

NET中的正常做法是打开一个SqlConnection并使用SqlCommand,然后将两者都处理掉

using(SqlConnection connection = new SqlConnection("myConnectionString"))
{
    using(SqlCommand command = new SqlCommand("dbo.SomeProc"))
    {
        // Execute the command, when the code leaves the using block, each is disposed
    }
}

由于到数据库的连接是一种昂贵的资源,所以最好尽可能晚地打开sql连接,早地关闭。因此,您应该在执行命令之前打开连接,并在执行后关闭连接


另一方面,如果要在短时间间隔内执行多个命令,最好打开连接一次,然后在所有命令执行完毕后关闭。

由于与数据库的连接是一项昂贵的资源,因此最好尽可能晚地打开sql连接,并尽早关闭。因此,您应该在执行命令之前打开连接,并在执行后关闭连接


另一方面,如果要在短时间内执行多个命令,最好打开连接一次,然后在所有命令执行完毕后关闭。

Ado.Net已经为您管理了连接池,因此您不必担心重复使用连接

您可以使用来关闭和释放连接:

   DataTable dt = new DataTable();
   using (SqlConnection conn = new SqlConnection("my_connection_string"))
   {
      using (SqlDataAdapter adapter = new SqlDataAdapter("SELECT * from Table", conn))
      {
        conn.open();
        adapter.Fill(dt);    
      }
   }

Ado.Net已经为您管理了连接池,所以您不必担心重用连接

您可以使用来关闭和释放连接:

   DataTable dt = new DataTable();
   using (SqlConnection conn = new SqlConnection("my_connection_string"))
   {
      using (SqlDataAdapter adapter = new SqlDataAdapter("SELECT * from Table", conn))
      {
        conn.open();
        adapter.Fill(dt);    
      }
   }

对于初学者来说,它们不是这样的,因为正在使用连接池,但是SqlCommand有一个重载来获取连接对象,所以您可以保留连接并传递它

一般来说:

使用(var ts=new TransactionScope()) { 使用(var connection=newsqlconnection(…) { 使用(var命令=新的SqlCommand(连接,…) { ... }

}

ts.完成(); }


当然,我建议在这一点上使用LINQ to SQL或EF。

对于初学者来说,他们不这样做,因为正在使用连接池,但是SqlCommand有一个重载来获取连接对象,因此您可以保留连接并传递它

一般来说:

使用(var ts=new TransactionScope()) { 使用(var connection=newsqlconnection(…) { 使用(var命令=新的SqlCommand(连接,…) { ... }

}

ts.完成(); }


当然,我建议此时使用LINQ to SQL或EF。

如果您不想担心打开和关闭连接,请尝试中的数据访问应用程序块。

如果您不想担心打开和关闭连接,请尝试中的数据访问应用程序块。

Jon有一点我认为:Jon有一个p我认为: