最佳实践?打开和关闭多个连接,或ado.net的一个大型开放连接

时间:2010-07-27 15:02:39

标签: c# sql database ado.net

我正在使用ADO.Net进行一些数据库连接,我只是希望我能以正确的方式做到这一点。我打开和关闭每个存储过程的多个连接。或者我应该只用一个打开的连接来包装它(数据库上的资源可能少吗?)谢谢,如果有什么奇怪的东西我可以做得更好让我知道谢谢!

示例:这个,但我喜欢其中的6个......

using (SqlConnection conn = new SqlConnection(ConnectionString))
{
    SqlCommand cmd = new SqlCommand("spSelectAllTrip", conn);
    cmd.CommandType = CommandType.StoredProcedure;
    conn.Open();
    ddlTripTypeA.DataSource = cmd.ExecuteReader();
    ddlTripTypeA.DataTextField = "TripType";
    ddlTripTypeA.DataValueField = "TripTypeAID";
    ddlTripTypeA.DataBind();
}
using (SqlConnection conn = new SqlConnection(ConnectionString))
{
    SqlCommand cmd = new SqlCommand("spSelectAllTripB", conn);
    cmd.CommandType = CommandType.StoredProcedure;
    conn.Open();
    ddlTripTypeB.DataSource = cmd.ExecuteReader();
    ddlTripTypeB.DataTextField = "TripType";
    ddlTripTypeB.DataValueField = "TripTypeBID";
    ddlTripTypeB.DataBind();
}

4 个答案:

答案 0 :(得分:5)

.Net已经为您管理了连接池,因此您无需担心重用连接,就像您可能使用旧的asp一样。我总是选择几个小的快速呼叫,而不是一直保持打开,因为并非所有打开的时间都通常用于呼叫。您的站点代码也在运行之间。

现在,如果您要一个接一个地连续拨打6个电话,那么打开一个并重复使用可能是有意义的。但除此之外我说的只是坚持你正在做的事情。

您唯一想要研究的是连接管理器,这样您就不必一遍又一遍地在.net中创建连接对象。但这与数据库连接与仅创建对象没有任何关系。

答案 1 :(得分:3)

您应该尽可能短的时间保持连接打开。因此,您要打开连接,执行查询或存储过程,然后关闭连接。虽然这听起来很昂贵,但它利用了ADO.NET的内置连接池。当您关闭连接时,它将返回到池并重新使用,这样您就不会受到性能影响。

答案 2 :(得分:1)

ADO.Net使用连接池,这样可以降低打开新连接的成本,避免在整个应用程序中打开一个连接。

但是,对于池中的连接进行混乱可能仍然存在一些开销,因此如果您的代码在代码的相同部分内按顺序并立即运行,那么您很可能最好在短时间内使用单一连接。再详细检查一下Adam的答案 - 您希望先设置其他所有内容,以便尽可能短的时间打开连接。

如果任何ADO.Net程序员可以确认或更正此问题,请执行此操作。

答案 3 :(得分:1)

更好的方法是准备两个命令,然后打开连接并快速连续执行:

conn.Open();
comm1.ExecuteReader();
comm2.ExecuteReader();

始终保持打开时间尽可能短。