“此操作必须打开连接”ODP上的例外情况

时间:2013-06-19 09:15:41

标签: c# connection using odp.net

我在我的applciation中调用了OracleCommandd.ExecuteNonquery(),我在下面的代码中得到了“此操作的连接必须打开”异常:

using (OracleConnection connection = new OracleConnection(ConnectionString))
        {
            OracleCommand oracleCommand = new OracleCommand(procedureName, connection);
            oracleCommand.CommandType = CommandType.StoredProcedure;

            oracleCommand.ExecuteNonQuery();
        }

当我在connection.Open();语句之后放置using时,异常不会发生,但不是using语句处理连接的打开和关闭阶段(打开关闭实际上menas离开连接从/到连接池。)

2 个答案:

答案 0 :(得分:3)

using语句仅用于实例化将在using语句范围内使用的对象。它会在处理连接时关闭连接但它不会打开它,你必须自己动手。 来自MSDN

  

提供方便的语法,确保正确使用   IDisposable对象。

    using (OracleConnection connection = new OracleConnection(ConnectionString))
    {
          connection.Open();
          using (OracleCommand oracleCommand = new OracleCommand(procedureName, connection);)
          {
               oracleCommand.CommandType = CommandType.StoredProcedure;
               oracleCommand.ExecuteNonQuery();
          }
    }

答案 1 :(得分:2)

  

但是没有使用处理开始和结束阶段的语句   连接

没有。
usingconnection.Open()

using (OracleConnection connection = new OracleConnection(ConnectionString))
{
  connection.Open(); //<-- must have
  //rest of code omitted
}

您无需致电connection.Close(),因为在处置连接时会发生这种情况。这是using关键字的真正用途。

这是using实际转化为:

try
{
  //code omitted
}
finally
{
  connection.Dispose();
}