我的应用用于连接数据库的连接字符串如下:
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 / 最后关闭和处理连接对象。但是,我经常收到oracle服务消息,我正在举行oracle会话。此外,如果我只是让我的应用程序打开,第二天尝试进行操作,我第一次得到ora-12537 network session end of file
例外,然后第二次尝试正在进行。经过一些阅读后,看起来我必须禁用连接池。如果这是正确的解决方法,如何禁用池?如果没有,那么还有什么可能是错的?
答案 0 :(得分:10)
您可以在连接字符串中添加Pooling=False
,但这意味着每次都会创建一个新连接。
+ "User Id=myusername;Password=mypass;Pooling=False;";
看看这个article,它可能有助于解决您的问题。另外,请查看此网站页面,特别是Using Connection Pooling部分