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