Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# &引用;此操作必须打开连接“;ODP例外_C#_Connection_Using_Odp.net - Fatal编程技术网

C# &引用;此操作必须打开连接“;ODP例外

C# &引用;此操作必须打开连接“;ODP例外,c#,connection,using,odp.net,C#,Connection,Using,Odp.net,我正在我的应用程序中调用OracleCommandd.ExecuteOnQuery(),并在下面的代码中出现“连接必须为此操作打开”异常: using (OracleConnection connection = new OracleConnection(ConnectionString)) { OracleCommand oracleCommand = new OracleCommand(procedureName, connection);

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

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

            oracleCommand.ExecuteNonQuery();
        }
当我放置
connection.Open()时
使用语句之后,异常不会发生,但不会使用语句处理连接的打开和关闭阶段(打开-关闭实际上是指从t/到连接池获取和离开连接)

但是使用语句不是在处理的开始和结束阶段吗 联系

否。
与连接无关。Open()


using
语句仅用于实例化将在
using
语句的作用域中使用的对象。处理连接时,它将关闭连接,但不会打开连接,您必须自己操作。 发件人:

提供方便的语法,确保正确使用 可识别的对象


我喜欢你的方法,但如果它引发了异常,你怎么能捕捉到呢?同时使用Using语句和try-catch块是一种好的做法吗?是的,您可以用一个try-catch块来封装所有这些语句。
using (OracleConnection connection = new OracleConnection(ConnectionString))
{
  connection.Open(); //<-- must have
  //rest of code omitted
}
try
{
  //code omitted
}
finally
{
  connection.Dispose();
}
    using (OracleConnection connection = new OracleConnection(ConnectionString))
    {
          connection.Open();
          using (OracleCommand oracleCommand = new OracleCommand(procedureName, connection);)
          {
               oracleCommand.CommandType = CommandType.StoredProcedure;
               oracleCommand.ExecuteNonQuery();
          }
    }