gpt4 book ai didi

c# - Oracle Managed DataAccess 连接对象保持连接打开

转载 作者:太空宇宙 更新时间:2023-11-03 14:45:34 25 4
gpt4 key购买 nike

我正在使用 Oracle.ManagedDataAccess Nuget 包版本 18.3.0。我尝试了很多东西。我试图处理我能想到的所有东西,甚至是 oracle 参数对象。并将所有内容包装在 using block 中,但无济于事。唯一真正对我有用的是注释行 OracleConnection.ClearPool(oracle);。这是一个错误,还是一些与配置相关的问题,还是我误解了这里的内容?此外,我尝试删除对 Oracle.ManagedDataAccess 的引用,并将其替换为对 System.Data.OracleClient 的引用,这实际上对我有用。它会自动关闭连接,因此没有连接处于“事件”状态。下面的代码我将它移到了一个简单的、单一的按钮、Windows 窗体应用程序中,以确保 100% 确保没有任何干扰并且问题仍然存在。

using (var oracle = new OracleConnection("Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=myhost)(PORT=SomePortHere))(CONNECT_DATA=(SERVER=SHARED)(SERVICE_NAME=anotherHost)))", new OracleCredential(userName,password)))
{
oracle.Open();
using (var command = new OracleCommand())
{
var query = "SELECT x from y where z=:param1";
command.Connection = oracle;
command.CommandText = query;
command.CommandType = System.Data.CommandType.Text;
var param1 = new OracleParameter(":param1", xyz);
command.Parameters.Add(param1);
using (var reader = command.ExecuteReader())
{
if (reader.Read())
{
//read the data from the reader
}
}
param1.Dispose();
}
//If this line is commented, there will be a connection left open, with InActive status
//OracleConnection.ClearPool(oracle);
}
password.Dispose();
return myData;

这是一张显示通过 Toad 打开的连接的图像。
Oracle Connection issue当然,每次单击该按钮,上面的代码都会执行,并且新 session 将保持打开状态,直到您在图像中看到。名称“TheTesterOfAllTests.exe”是 Windows 窗体应用程序。
这是配置问题吗?除了使用 ClearPool 方法之外,还有什么方法可以解决这个问题吗?因为它会影响应用程序的性能。
附言最初使用上述代码的应用程序是一个由 Web 应用程序使用的 WCF 服务
附言2 存在某种内存泄漏,每次单击该按钮都会增加内存使用量

最佳答案

我遇到了同样的问题。我通过更改 OracleConnection 的初始化解决了这个问题。

来自

var con = new OracleConnection(
"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=myhost)(PORT=SomePortHere))(CONNECT_DATA=(SERVER=SHARED)(SERVICE_NAME=anotherHost)))",
new OracleCredential(userName,password));

var con = new OracleConnection(
"USER ID=myuser;PASSWORD=mypwd;Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=myhost)(PORT=SomePortHere))(CONNECT_DATA=(SERVER=SHARED)(SERVICE_NAME=anotherHost)))");

对我来说,这种不同的行为看起来像是一个错误。

因此,我不能再使用 OracleCredential,必须将密码存储为字符串。这对我来说没问题。

备注:SecureString shouldn't be used

关于c# - Oracle Managed DataAccess 连接对象保持连接打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54373754/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com