我在我的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离开连接从/到连接池。)
答案 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)
但是没有使用处理开始和结束阶段的语句 连接
没有。
using
与connection.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();
}