关闭和打开同一个 SqlConnection 对象而不是每次都创建一个新对象是否有任何问题?例如:
SqlConnection conn = new SqlConnection(ConnectionString);
conn.Open();
//Some work here
conn.Close()
//Some work here... conn stays in scope
conn.Open()
通过第二次打开连接是否有机会获得非法状态异常?
关闭和打开同一个 SqlConnection 对象而不是每次都创建一个新对象是否有任何问题?例如:
SqlConnection conn = new SqlConnection(ConnectionString);
conn.Open();
//Some work here
conn.Close()
//Some work here... conn stays in scope
conn.Open()
通过第二次打开连接是否有机会获得非法状态异常?
您可以在关闭连接后重新打开连接(但不能重新打开已处理的连接)。
至于 Dave Zych 的问题 - 我们的一些客户在他们的数据库上拥有每个连接的许可证,关闭连接允许其他应用程序使用它。
通常您将启用连接池,在这种情况下,与数据库的实际连接不会(总是)(立即)关闭,但可以由应用程序中的其他相等连接对象使用。
这样做没有问题。您可以随意打开和关闭连接。但是,我想知道您为什么要打开和关闭同一个,而不是为每个呼叫创建一个新的。那是因为你连续快速地打了很多电话吗?如果是这样,您可以考虑使用单个SqlConnection
并在开始时将其打开一次并在结束时将其关闭一次。
打开和关闭同一个连接与创建新连接做完全相同的事情,然后打开和关闭它,只要连接字符串没有改变。
原因: ADO.NET 使用称为连接池的技术。当您打开带有连接字符串的连接时,ADO.NET 将查看池并查看带有该连接字符串的此连接是否已存在于池中,如果答案是肯定的,那么它将获取并打开该连接为你。否则,ADO.NET 会将带有该连接字符串的连接添加到池中并打开它。这就是为什么第一次访问数据库总是比其他人慢的原因。
此处的详细信息:https ://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql-server-connection-pooling