C# “错误”;此操作必须打开连接“;从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) {

我试图使用带有输出参数的存储过程(parm)从oracle数据库中检索BLOB值。这是我做这件事的一段代码

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();