VB.net:使用Shared方法获取数据库连接的任何问题?

时间:2009-08-26 14:47:55

标签: vb.net connection-pooling

我有一个实用程序类,可以创建&返回数据库连接:

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

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

4 个答案:

答案 0 :(得分:1)

由于每次不存在任何并发问题时都返回新连接。如果您使用Shared方法返回对相同实例的多个引用,那可能是一个问题,但这不是您在此处所做的。

只要每次都返回数据库连接对象的新实例,就可以安全地使用此方法。任何连接池也可以像往常一样工作 - 你不必担心你的Shared方法使用会产生问题。

答案 1 :(得分:1)

暂时忘记并发呼叫问题。如果存在任何连接池,则绝对可以重用相同的底层数据库连接,即使它们不使用相同的对象。

这通常是理想的事情,因为打开与DB的连接可能是一项昂贵的操作。

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

答案 2 :(得分:0)

我不这么认为。

由于c是局部变量(“堆栈变量”)而不是静态变量,因此每次调用都有自己的c实例。 接下来,您将创建一个新对象(连接)并返回此对象。

答案 3 :(得分:0)

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

我可能会做一个改变:制作方法private

这将强制您将所有数据访问代码放在一个类中,并推送以创建一个漂亮的独立数据访问层。至少要使它internal,以便您的数据访问层仅限于一个程序集(与代码的其余部分分开)。