C# 启动和关闭SQL连接-在开始和结束时,还是在每次需要时?
我正在用ASP.Net用C#制作一个web应用程序,并使用SQL数据库。在我看到的指南(关于SqlConnection和SqlCommand)中,每次发送查询时,它们都会打开和关闭SQL连接。但我不确定这是否是处理连接的最佳方式,因为我还学习了一些PHP,据我所知,在PHP中,一开始只打开一次连接。那么,处理连接的最佳方式是什么呢?对于web请求的长度,通常应该有一个连接和一个事务 如果有两个连接,则可能存在不一致的数据。e、 在第一次查询中,您检查银行余额,然后关闭它。然后在余额中添加5美元,并在下一次连接中保存。如果其他人在两个连接之间添加了5美元怎么办?它会丢失的 最简单的方法是打开连接global.asax BeginRequest并将其保存到HttpContext中。无论何时需要连接,都要从那里拔出。请确保您已关闭EndRequest中的连接 另外,请阅读此处有关连接池的内容:C# 启动和关闭SQL连接-在开始和结束时,还是在每次需要时?,c#,asp.net,sql,C#,Asp.net,Sql,我正在用ASP.Net用C#制作一个web应用程序,并使用SQL数据库。在我看到的指南(关于SqlConnection和SqlCommand)中,每次发送查询时,它们都会打开和关闭SQL连接。但我不确定这是否是处理连接的最佳方式,因为我还学习了一些PHP,据我所知,在PHP中,一开始只打开一次连接。那么,处理连接的最佳方式是什么呢?对于web请求的长度,通常应该有一个连接和一个事务 如果有两个连接,则可能存在不一致的数据。e、 在第一次查询中,您检查银行余额,然后关闭它。然后在余额中添加5美元,
重复打开和关闭连接并不“昂贵”,前提是每次用户名相同。对于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我认为: