C# “内部启动sql对象”之间的区别;使用;语句和使用语句进行装饰
我怀疑在同一个代码块中以不同的方式应用“Using”语句有什么显著的区别,最好知道实践对我来说是最好的方法 sameple 1代码块C# “内部启动sql对象”之间的区别;使用;语句和使用语句进行装饰,c#,using,C#,Using,我怀疑在同一个代码块中以不同的方式应用“Using”语句有什么显著的区别,最好知道实践对我来说是最好的方法 sameple 1代码块 using (SqlConnection SqlConnection = new SqlConnection(dbConnectionString)) { SqlConnection.Open(); using (var command = new
using (SqlConnection SqlConnection = new SqlConnection(dbConnectionString))
{
SqlConnection.Open();
using (var command = new SqlCommand(store_procName, SqlConnection))
{
command.Parameters.Add(Constants.PARAM_Value, SqlDbType.VarChar).Value = Id;
command.CommandType = CommandType.StoredProcedure;
using (var adp = new SqlDataAdapter(command))
{
adp.Fill(dtValid);
}
}
}
return dtValid;
示例代码块2
using (SqlConnection SqlConnection = new SqlConnection(dbConnectionString))
{
SqlConnection.Open();
SqlCommand command = new SqlCommand(store_procName, SqlConnection);
command.Parameters.Add(Constants.PARAM_Value, SqlDbType.VarChar).Value = Id;
command.CommandType = CommandType.StoredProcedure;
SqlDataAdapter adp = new SqlDataAdapter(command);
adp.Fill(dtValid);
}
return dtValid;
using
语句是一种语法糖,它可以释放资源(例如内存或句柄),而无需自己编写代码。所以像这样的代码片段
using (var adp = new SqlDataAdapter(command))
{
adp.Fill(dtValid);
}
转换为类似以下内容:
(这只是一个示例,让您了解这一点,不一定是编译器生成的确切代码)
因此,如果您在代码中使用语句来ommit内部的,那么此时将不会调用实例的Dispose()
方法。垃圾回收最终会清理这些对象(这通常会导致调用Dispose()
)
如果您对该方法进行了大量调用并读取了大量数据,因此SqlCommand
和SqlDataAdapter
将消耗大量资源,那么这种差异是相关的。如果要尽快释放这些资源,应使用
语句将代码包含在中
你要求的是最佳实践(这通常是一个品味问题)。在大多数情况下,第一个代码段(包含所有使用的语句)更可取,因为它会立即释放所有不再需要的资源。这不是asp.net mv
c特定的问题或sql Server
r特定的问题。就c#。此外,请在发布前多花10秒钟格式化代码,以提高可读性。:)事实上,我在MVC框架中工作,我想有些人可能会遇到这样的情况。看看@soykan,我知道using语句及其好处,我将遵循第一个示例代码块1,突然,当我看到示例代码块2时,我无法区分系统将如何处理,以及哪一个是最好的遵循和实践方法。@Ehsan sajjad我知道我试图单独询问两个代码块之间的差异的using语句
SqlAdapter adp = null;
try
{
adp = new SqlDataAdapter(command);
adp.Fill(dtValid);
}
finally
{
if (adp != null) adp.Dispose();
// or rather (adp as IDisposable)?.Dispose();
}