2

我正在调用OracleCommandd.ExecuteNonquery()我的应用程序,并且在下面的代码中收到“必须为此操作打开连接”异常:

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

            oracleCommand.ExecuteNonQuery();
        }

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

4

2 回答 2

3

但没有使用语句处理连接的打开和关闭阶段

不,无关
_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();
}
于 2013-06-19T09:23:05.617 回答
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();
          }
    }
于 2013-06-19T09:24:17.260 回答