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