Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.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# “内部启动sql对象”之间的区别;使用;语句和使用语句进行装饰_C#_Using - Fatal编程技术网

C# “内部启动sql对象”之间的区别;使用;语句和使用语句进行装饰

C# “内部启动sql对象”之间的区别;使用;语句和使用语句进行装饰,c#,using,C#,Using,我怀疑在同一个代码块中以不同的方式应用“Using”语句有什么显著的区别,最好知道实践对我来说是最好的方法 sameple 1代码块 using (SqlConnection SqlConnection = new SqlConnection(dbConnectionString)) { SqlConnection.Open(); using (var command = new

我怀疑在同一个代码块中以不同的方式应用“Using”语句有什么显著的区别,最好知道实践对我来说是最好的方法 sameple 1代码块

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