我有一个实用程序类,它创建并返回一个数据库连接:
Public Shared Function GetConnection() as OracleConnection
dim c as New OracleConnection()
... set connection string...
c.Open()
Return c
End Function
并发调用是否存在返回相同连接的风险?连接字符串启用池。
我有一个实用程序类,它创建并返回一个数据库连接:
Public Shared Function GetConnection() as OracleConnection
dim c as New OracleConnection()
... set connection string...
c.Open()
Return c
End Function
并发调用是否存在返回相同连接的风险?连接字符串启用池。
由于您每次都返回一个新连接,因此不会有任何并发问题。如果您使用一种Shared
方法来返回对同一实例的多个引用,这可能是一个问题,但这不是您在这里所做的。
只要您每次总是返回数据库连接对象的新实例,就可以安全地以这种方式使用此方法。任何连接池也将像往常一样工作 - 您也不必担心您的Shared
方法使用会在那里产生问题。
暂时忘记并发呼叫问题。如果有任何连接池正在进行,您绝对可以重用相同的底层数据库连接,即使它们不使用相同的对象。
这通常是可取的,因为打开与数据库的连接可能是一项昂贵的操作。
您是否担心从另一个调用方关闭连接对象?如果是这样,正如另一个回复指出的那样,我认为您提供的代码是安全的。
我不这么认为。
由于 c 是一个局部变量(“堆栈变量”)而不是静态变量,因此每个调用都有它自己的 c 实例。接下来创建一个新对象(连接)并返回它。
并发应该没有任何问题,因为每次调用都是一个新的连接。
不过,我可能会做一个改变:制作方法private
。
这将迫使您将所有数据访问代码放在一个类中,并推动创建一个漂亮的、独立的数据访问层。至少要做到这internal
一点,以便您的数据访问层仅限于单个程序集(与您的其余代码分开)。