0

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

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

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

4

4 回答 4

1

由于您每次都返回一个新连接,因此不会有任何并发​​问题。如果您使用一种Shared方法来返回对同一实例的多个引用,这可能是一个问题,但这不是您在这里所做的。

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

于 2009-08-26T14:50:48.753 回答
1

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

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

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

于 2009-08-26T14:52:29.077 回答
0

我不这么认为。

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

于 2009-08-26T14:53:27.360 回答
0

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

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

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

于 2009-08-26T14:53:44.240 回答