代码之家  ›  专栏  ›  技术社区  ›  chris

vb.net:使用共享方法获取数据库连接时有问题吗?

  •  0
  • chris  · 技术社区  · 16 年前

    我有一个创建和返回DB连接的实用程序类:

    Public Shared Function GetConnection() as OracleConnection
      dim c as New OracleConnection()
      ... set connection string...
      c.Open()
      Return c
    End Function
    

    是否存在并发调用返回相同连接的风险?连接字符串启用池。

    4 回复  |  直到 16 年前
        1
  •  1
  •   Andrew Hare    16 年前

    因为您每次都返回一个新的连接,所以不会有任何并发问题。如果你用的是 Shared 方法返回对 相同的 例如,这可能是个问题,但这不是你在这里所做的。

    只要每次都返回数据库连接对象的新实例,就可以安全地使用此方法。任何连接池也将一如既往地工作-您不必担心 共享 方法的使用也在那里造成了问题。

        2
  •  1
  •   JohnFx    16 年前

    暂时忘记并发调用问题。如果有任何连接池正在运行,那么您将绝对可以重用相同的基础数据库连接,即使它们不使用相同的对象。

    这通常是一件可取的事情,因为打开与数据库的连接可能是一项昂贵的操作。

    您担心关闭另一个调用程序下的连接对象吗?如果是这样的话,正如另一个回应指出的那样,我认为使用您提供的代码是安全的。

        3
  •  0
  •   ManniAT    16 年前

    我不这么认为。

    因为C是局部变量(“堆栈变量”),而不是静态变量,所以每个调用都有自己的C实例。 接下来创建一个新对象(连接)并返回这个。

        4
  •  0
  •   Joel Coehoorn    16 年前

    并发性不应该有任何问题,因为每个调用都是一个新的连接。

    不过,我可以做一个改变:改变方法 private .

    这将迫使您将所有数据访问代码放在一个类中,并推动创建一个好的、独立的数据访问层。至少能做到 internal 这样,您的数据访问层就只限于一个程序集(与其他代码分离)。