我正在使用.Net Core和Oracle.ManagedDataAccess.Core插件创建一个Web API,该插件访问Oracle数据库以检索Blob字段并将其作为字节数组返回。我创建了一个函数(getBlobfromDB),该函数从SQL数据库上的加密字段获取Oracle连接字符串,进行连接并使用OraleDataReader检索并返回Blob字段。但是,当OraleDataReader尝试读取记录时,出现此异常:“对关闭的对象无效的操作”。
搜索此问题时,最相关的答案是post
但是,我100%确信使用conn字符串的用户可以访问,因为那是架构所有者,而且我还尝试将架构所有者添加到Select查询中(SELECT FIELD FROM SCHEMA_OWNER.TABLE WHERE ID = “”)出现相同的错误
因此,我尝试了另外两件事,即从同一数据库中的另一个表获取了不同的VARCHAR字段,仍然遇到了相同的错误;并尝试使用其他Oracle数据库后,我能够成功检索数据,因此我认为conn字符串或服务器设置有问题,也许是吗?我不知道我还能做什么或尝试什么,我会很感激您能给我的任何帮助/建议
这是简化功能
private OracleBlob getBlobfromDB(string sSystem, string sID)
{
string sSQL = String.Empty;
string connString = String.Empty;
OracleConnection oConn = new OracleConnection();
if (string.IsNullOrWhiteSpace(sID) || string.IsNullOrWhiteSpace(sSystem) )
{
return null;
}
sSQL = "SELECT BLOB_FIELD FROM TABLE WHERE ID = " + sID;
connString = getConnectionString(sSystem);
try
{
using (oConn = new OracleConnection(connString))
{
oConn.Open();
OracleCommand oCom = new OracleCommand(sSQL, oConn);
OracleDataReader oDr = oCom.ExecuteReader();
if (oDr.HasRows)
{
//I'm able to reach to this point before getting the exception
oDr.Read();
OracleBlob blob = oDr.GetOracleBlob(0);
// Clean up
oDr.Close();
oDr.Dispose();
oCom.Dispose();
return blob;
}
else
{
// Clean up
oDr.Close();
oDr.Dispose();
oCom.Dispose();
return null;
}
}
}
catch (Exception x)
{
return null;
}
finally
{
oConn.Close();
}
}