【问题标题】:Opening two SQLConnections with the same ConnectionString打开两个具有相同 ConnectionString 的 SQLConnection
【发布时间】:2011-12-19 14:54:29
【问题描述】:

我正在跟踪一个不是我自己编写的库中的错误。当将此库与 ASP.NET 一起使用时,我收到 db 连接错误,因为当使用相同的连接字符串打开第二个连接时,SQLConnection 似乎已关闭。

这是记录在案的行为吗?可以用相同的连接字符串打开一个新的 SQLConnection 关闭另一个 SQLConnection 对象吗?

从调试看来,这似乎是我的问题的最可能原因,但我在网上找不到任何东西来支持我的理论。

【问题讨论】:

  • 找到这个的简单方法是搜索 new 这个词,它可能会被再次创建。这个连接可以是你的代码打开和关闭的属性或静态字符串。只创建新的一次.. 或添加将检查 Connection.State.. 发布代码的代码,您正在创建它.. 以及它被关闭或连接状态已关闭的代码
  • 应该可以的。该问题更有可能是跨请求重用连接。
  • @DJ KRAZE:我已经找到了使用相同连接字符串打开第二个连接的部分。正如我所写,我想知道这关闭第一个连接是否正常。
  • lynn 已经准确地表达了我想说的话.. 很棒的简短而甜蜜的回答@Lynn UPvote 绝对..

标签: c# .net sql-server sqlconnection


【解决方案1】:

不,会发生什么,当您调用SqlConnection.Open() 方法时,即使使用相同的连接字符串参数,它也会执行以下两种操作之一:重用池中未使用的连接,或创建新连接。无论哪种方式,您都会为 SQL Server 生成不冲突的 SPID。

【讨论】:

    【解决方案2】:

    这是记录在案的行为吗?

    没有。

    用相同的连接字符串打开一个新的 SQLConnection 可以关闭另一个 SQLConnection 对象吗?

    没有。

    请注意,除非您修改了设置,否则 SQL Server 允许同时连接 32,767 个。但即便如此,这也无法解释您所看到的行为。

    【讨论】:

      【解决方案3】:

      简而言之,使用相同的连接字符串打开一个新连接不会关闭您现有的连接。但是...通过创建对新连接的新引用来重用已经存在的对象将破坏连接。

      【讨论】:

      • 对不起,我没看懂最后一句话,你能解释一下你的意思吗?如何通过创建对新对象的新引用来重用对象?
      • 是的,如果我有: SqlConnection conn = new SqlConnection(someconnstring); conn = new SqlConnection(someconnstring); ...然后我原来的连接对象将被新的覆盖。
      • @Lynn Crumbling:这不是重用现有对象。此外,这不一定会终止连接。
      猜你喜欢
      • 2015-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多