数据库通信(恕我直言)的最佳方法是这种方法。
创建连接
连接
创建命令
执行查询
处置命令
处置连接
这似乎是一个很大的开销,并且是为每个查询创建连接的性能杀手。但是,大多数 .NET 数据提供者都支持池化,因此基本上打开的连接仍然存在并且有效,并且将在下次请求时被回收。
这种方法比执行 a要好得多,connection.State
因为您不能 100% 依赖它,并且比TnsPing
为每个查询执行 a 更快。
oracle 的连接池:http: //msdn.microsoft.com/en-us/library/aa719767 (v=vs.71).aspx
示例代码:
Public Static Readonly ConnectionString = "Data Source=MyOracleServer;Integrated Security=yes;"
Public Shared Function ExecuteScalar(of T)(string commandString)
Using con As new OracleConnection(connectionString)
con.Open()
Using cmd As new OracleCommand(con, commandString)
Return CType(cmd.ExecuteScalar(), T)
End Using
End Using ' this one will call con.Dispose() which will close the connection
End Function
使用这个简单的代码,您将拥有一种无连接的方法,就像您使用与您的数据库通信的网站一样。您所需要的只是巧妙的异常处理(这对服务应用程序来说应该不难。只需使用全局异常处理程序,将异常转储到事件日志并稍后重试。