C# 正确的使用方法;使用;在C中#
我有两套代码,如下所示。我的问题是,我们是否也需要将“using”用于命令和适配器,还是仅用于连接?正确的方法是什么C# 正确的使用方法;使用;在C中#,c#,C#,我有两套代码,如下所示。我的问题是,我们是否也需要将“using”用于命令和适配器,还是仅用于连接?正确的方法是什么 using (OracleConnection conn = new OracleConnection(ConnectionString)) { conn.Open(); OracleCommand command = new OracleCommand(ProcedureName) { Comma
using (OracleConnection conn = new OracleConnection(ConnectionString))
{
conn.Open();
OracleCommand command = new OracleCommand(ProcedureName)
{
CommandType = CommandType.StoredProcedure,
Connection = conn
};
command.Parameters.Add(new OracleParameter("P_ID", OracleDbType.Varchar2, Id, ParameterDirection.Input));
command.Parameters.Add(new OracleParameter("CUR_OUT", OracleDbType.RefCursor, ParameterDirection.Output));
OracleDataAdapter adapter = new OracleDataAdapter(command);
adapter.Fill(dt);
}
上面的代码只有一个using语句,下面的代码有3个using语句
using (OracleConnection conn = new OracleConnection(ConnectionString))
{
await conn.OpenAsync();
using (OracleCommand oCommand = new OracleCommand(ProcedureName))
{
oCommand.BindByName = true;
oCommand.CommandType = CommandType.StoredProcedure;
oCommand.CommandTimeout = await GetCommandTimeout(DatabaseConstants.OracleCommandTimeoutInSeconds);
oCommand.Connection = conn;
oCommand.Parameters.Add(new OracleParameter("P_ID", OracleDbType.Varchar2, Id, ParameterDirection.Input));
oCommand.Parameters.Add(new OracleParameter("CUR_OUT", OracleDbType.RefCursor, ParameterDirection.Output));
using (OracleDataAdapter oDatAdapter = new OracleDataAdapter(oCommand))
{
oDatAdapter.Fill(dataSet);
}
}
}
连接和评论都需要它们。任何实现IDisposable的东西都应该被处理掉 在创建命令之前,无需打开连接。这意味着您可以跳过一组{}
using (for connection)
using (for command)
{
processing
}
这是一个更好,更容易格式化的明智
实际上,我会在一开始就检查是否将其添加到适配器中
还请注意,在当前的C#(撰写本文时为8.0)中,您可以使用using进行变量声明
using var conn = new OracleConnection()
没有()。变量在末尾进行处理。这意味着更少的格式。这称为“使用定义”-您可以对实现IDisposable接口的所有对象使用
using
:
- 如果这些对象是由.net framework管理的,那么在您使用完它们之后,这将是一个明确的销毁它们的调用
- 如果它们不是由.net frame word管理的,那么您可以通过这种方式来处理它们李>
SqlConnection
可以安全地关闭,然后让它超出范围。处理阻止在关闭它的基础上重新打开它,这是唯一的区别。再次强调,使用using更安全,因此您不能忘记关闭连接。关于跳过{},我认为明智的做法是始终将它们写出来并明确说明。但这是一个风格问题,每个人都必须找到自己的答案/并不总是使用公司规定。我经常一行接一行地使用,因为如果你有7-8行使用wiith{}和令人非常困惑的行-太多缩进。@TomTom我也需要它作为适配器吗?@Chatra它实现IDisposable了吗?然后是。在vb中,您可以在using指令之后创建idisposable对象的列表。这样可以避免许多缩进。当然,这仅在后续对象不需要更高级别的CTOR时才起作用。即使省略{},也应该缩进。不确定c#是否允许类似的行为。无论如何,使用声明似乎是一个好主意,当它超出范围时进行处置。