C# “错误”;此操作必须打开连接“;从oracle数据库读取BLOB时
我试图使用带有输出参数的存储过程(parm)从oracle数据库中检索BLOB值。这是我做这件事的一段代码C# “错误”;此操作必须打开连接“;从oracle数据库读取BLOB时,c#,oracle,blob,C#,Oracle,Blob,我试图使用带有输出参数的存储过程(parm)从oracle数据库中检索BLOB值。这是我做这件事的一段代码 using (DbCommand cmd = db.GetStoredProcCommand(sStoredProcName)) { cmd.Connection = conn; AttachParameters(db, cmd, lParamValueList); // Open connection if (idbTransaction != null) {
using (DbCommand cmd = db.GetStoredProcCommand(sStoredProcName))
{
cmd.Connection = conn;
AttachParameters(db, cmd, lParamValueList);
// Open connection
if (idbTransaction != null)
{
db.ExecuteNonQuery(cmd, idbTransaction);
}
else
{
db.ExecuteNonQuery(cmd);
}
// Retrieve any return values
GetReturnValues(db, conn, cmd, ref lParamValueList);
}
然后在GetReturnValues下还有另一个调用函数,有问题的代码是
cmd.Connection = conn;
if (db != null && cmd != null && (Out || IsReturnValue))
{
int iIndex = ((Oracle.DataAccess.Client.OracleCommand)cmd).Parameters.IndexOf(ParamName);
if (iIndex >= 0)
{
Oracle.DataAccess.Client.OracleParameter parm = (((Oracle.DataAccess.Client.OracleCommand)cmd).Parameters[iIndex]);
if (conn.State == ConnectionState.Closed)
conn.Open();
Oracle.DataAccess.Types.OracleBlob blob = new Oracle.DataAccess.Types.OracleBlob((Oracle.DataAccess.Client.OracleConnection)conn);
blob = (Oracle.DataAccess.Types.OracleBlob)parm.Value; //<============== Troubled code
if (blob.Length > 0)
{
byte[] bytes = new byte[blob.Length];
blob.Read(bytes, 0, (int)blob.Length);
ReturnValueBytes = bytes;
}
...
BLOB变量内的连接状态为关闭
我不明白为什么会这样。任何提示或帮助都将不胜感激
谢谢,
迪帕克大多数时候(对我来说)都是这样,这是一个愚蠢的错误。我更专注于BLOB变量,几乎忽略了其他内容 我在做什么
db.ExecuteNonQuery(cmd);
就在这之后,连接就被关闭了。我把代码改成了
cmd.ExecuteNonQuery();
现在工作正常了
希望这将帮助其他人,并将节省一些时间
干杯,
迪帕克
cmd.ExecuteNonQuery();