【发布时间】:2015-12-26 18:24:33
【问题描述】:
我的应用程序用来连接数据库的连接字符串如下:
private const string oradb = "Data Source=(DESCRIPTION=(ADDRESS_LIST="
+ "(ADDRESS=(PROTOCOL=TCP)(HOST=host.name)(PORT=1521)))"
+ "(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=service.name)));"
+ "User Id=myusername;Password=mypass;";
在我的应用程序的所有数据库访问点中,我使用以下模式:
OracleConnection conn = new OracleConnection(oradb);
try
{
Console.WriteLine("Opening DB Connection...");
conn.Open();
string queryString = string.Format(@"SELECT ...");
using (OracleCommand command = new OracleCommand(queryString, conn))
{
using (OracleDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
...
}
}
}
}
catch (Exception e)
{
Console.WriteLine("Exception occured during DB access: {0}", e.Message);
dbr.Error = e.Message;
}
finally
{
Console.WriteLine("Closing DB connection");
conn.Close();
conn.Dispose();
}
确保我正确处理异常并在 try/catch/finally 关闭和处置连接对象。但是,我经常收到我正在举行 oracle 会话的 oracle 服务消息。此外,如果我只是让我的应用程序打开并在第二天尝试进行操作,我第一次收到ora-12537 network session end of file 异常,然后第二次尝试正在经历。经过一番阅读,看起来我必须禁用连接池。如果这是解决的正确方法,如何禁用池?如果不是,那么还有什么可能是错的?
【问题讨论】:
-
不完全符合您的要求,但是....
OracleConnection.ClearPool(conn); -
我必须在哪里做?我可以在连接字符串中指定根本不使用池吗?
-
不知道,因此评论,而不是答案。我想你可以在
Close()之后清空池子 -
附注:当
OracleConnection(即DbConnection)实现IDisposable时,您可以使用using模式,而不是在Close和Dispose中调用finally块。 -
@Micke:它会吞下异常,我不会有关于它们的信息,对吧?