我正在使用ASP.Net在C#中创建一个Web应用程序,我正在使用SQL数据库。在我看到的指南(关于SqlConnection和SqlCommand)中,每次他们想要发送查询时,他们都会打开并关闭SQL连接。但我不确定这是处理连接的最佳方式,因为我也学过一些PHP,据我所知,在PHP中你只在开始时打开一次连接。那么处理连接的最佳方法是什么?
答案 0 :(得分:3)
对于Web请求的长度,您通常应该有一个连接和事务。
如果您有两个连接,则可能会有不一致的数据。例如在第一个查询中,您检查银行余额,然后关闭它。然后,您将5美元添加到余额中,并将其保存在下一个连接中。如果其他人在这两个连接之间增加了5美元怎么办?它会失踪。
最简单的方法是打开连接global.asax BeginRequest并将其保存到HttpContext中。无论何时需要连接,请从那里拉出来。请确保。关闭EndRequest中的连接
另外,请在此处阅读连接池:http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx 如果用户名每次都相同,重复打开和关闭连接并不“昂贵”。
答案 1 :(得分:1)
Ado.Net已经为您管理了连接池,因此您无需担心重用连接。
您可以使用Using statement关闭并处置连接:
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);
}
}
答案 2 :(得分:0)
.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
}
}
答案 3 :(得分:0)
由于与数据库的连接是一种昂贵的资源,因此最好尽可能晚地打开sql连接并尽早关闭。因此,您应该在执行命令之前打开连接,并在执行命令后将其关闭。
另一方面,如果要在很短的时间间隔内执行许多命令,最好先打开一次连接,然后在执行完所有命令后关闭。
答案 4 :(得分:0)
对于初学者而言,他们没有,因为正在使用连接池,但SqlCommand有一个重载来获取连接对象,所以你可以保持连接并传递它。
一般而言:
使用(var ts = new TransactionScope()) { 使用(var connection = new SqlConnection(...)) { using(var command = new SqlCommand(connection,...) { ... }
using (var command = new SqlCommand(connection, ...)
{
...
}
}
ts.Complete(); }
当然我建议此时使用LINQ-to-SQL或EF。
答案 5 :(得分:0)
如果您不想担心打开和关闭连接,请尝试Enterprise Library中的数据访问应用程序阻止。