在.NET应用程序中有一个共享SqlConnection对象用于所有数据库连接是一种好的做法,还是应该在每次访问数据库时都有一个单独的对象?
我目前有一个共享的,似乎突然遇到了问题。当我需要使用SQL身份验证模式而不是Windows身份验证模式时,似乎不能使用共享模式。我刚刚第一次尝试使用SQL身份验证,当我第二次尝试使用相同的连接时,它给出了这个错误:
已有一个打开的DataReader与此命令关联,必须先将其关闭。
发布于 2009-05-22 21:13:22
你真的应该有一个单独的。重用连接是由connection pooling处理的。第二个问题,就像其他人所说的,可能可以通过启用MARS来解决。
发布于 2009-05-22 21:13:07
这个错误绝对与身份验证无关。在关闭从ExecuteReader()返回的SqlDataReader之前,您正在重用中间的连接。这是被禁止的。您必须检查您的代码并消除您的问题。有一些替代方案可以使用MARS (multiple active record sets ),但我强烈建议您这样做。
在您的应用程序中使用多个连接可能会更糟,因为显然您不知道正在使用什么连接以及何时使用,所以当您将使用单独的连接时,您将遇到事务一致性问题。
发布于 2009-05-22 21:11:12
其中很大一部分可能是dup from here;简而言之,在大多数情况下,保持连接是短暂的和本地的。Re是数据读取器;也许启用MARS(http://msdn.microsoft.com/en-us/library/cfa084cz(VS.80%29.aspx)?
https://stackoverflow.com/questions/899987
复制相似问题