Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我应该使用静态数据库连接吗_C#_Database_Oracle - Fatal编程技术网

C# 我应该使用静态数据库连接吗

C# 我应该使用静态数据库连接吗,c#,database,oracle,C#,Database,Oracle,在连接到Orace数据库的应用程序中,我总是创建一个新连接,打开它,执行OracleCommands,然后关闭它。最近我认为实现静态连接是一个更好的主意。假设我有一个可以从任何地方访问的静态连接。每次我需要连接到数据库时,我都可以检查静态连接的状态,如果还没有打开就打开,然后关闭。您认为这是有益的还是有更多的缺点?我假设您在这里使用ODBC,因为您没有明确说明,并且通常使用它 不,每次都应该使用新连接,这是Microsoft推荐的标准做法。如果您使用的是ODBC等,那么windows将管理这些连

在连接到Orace数据库的应用程序中,我总是创建一个新连接,打开它,执行OracleCommands,然后关闭它。最近我认为实现静态连接是一个更好的主意。假设我有一个可以从任何地方访问的静态连接。每次我需要连接到数据库时,我都可以检查静态连接的状态,如果还没有打开就打开,然后关闭。您认为这是有益的还是有更多的缺点?

我假设您在这里使用ODBC,因为您没有明确说明,并且通常使用它

不,每次都应该使用新连接,这是Microsoft推荐的标准做法。如果您使用的是ODBC等,那么windows将管理这些连接,缓存它们以供重用,这样可以更轻松地管理事物的生命周期

如果您使用静态连接,您可能会将其提前处理,或者在不知情的情况下关闭它。一般来说,这只是有点尴尬和过早的优化

要部署高性能应用程序,通常必须使用 连接池。但是,当您使用.NET Framework数据时 ODBC的提供程序,您不必启用连接池 因为提供者会自动管理它


请参阅以了解更多信息。

一般来说,不应该使用单一连接-所有.NET ADO.NET提供程序都支持连接池,正常模式是根据需要打开/关闭连接(在
中使用
try/finally
块以确保在发生异常时关闭连接)

在单线程客户端应用程序中,您可以使用共享静态连接,但它不可能给您带来任何可测量的性能好处,所以不要这样做


在任何其他应用程序中,您绝对不应该使用共享静态连接,因为它不是线程安全的。

Windows不处理连接,但CLR有一个连接池。@Henkholtman,如果启用了
ConnectionPool
,您所说的连接池实际上只是MSSQL连接池的一个传递,对吗?此外,它还会在任何其他数据库实现上采用类似的操作?@Mike:我相信这是Windows ODBC的东西,不依赖SQL。尝试在Windows中打开“ODBC数据源管理员”应用程序,然后单击连接池选项-查看是否列出了您的oracle数据库。查看数据库提供商可能提供的连接池。