Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.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# SqlConnection和SqlCommand编程模式:哪一种更好?_C#_Sql_Sql Server - Fatal编程技术网

C# SqlConnection和SqlCommand编程模式:哪一种更好?

C# SqlConnection和SqlCommand编程模式:哪一种更好?,c#,sql,sql-server,C#,Sql,Sql Server,这两种方法中哪一种更好?为什么呢?第一个版本更好,因为您不必记得关闭连接,因为SqlConnection被包装在using语句中。不需要在第一个版本中调用conn.Close()。根据经验法则,连接将在的finally块中关闭: 始终处置IDisposables 使用和最简单 所以…你能把你的代码显示为纯文本而不是图像吗?“更好”有点主观。最好询问您是否有特定的问题。第一个问题是因为它使用了usingSqlCommand确实实现了IDisposable,因为它源于组件。否则代码甚至无法编译。

这两种方法中哪一种更好?为什么呢?

第一个版本更好,因为您不必记得关闭连接,因为
SqlConnection
被包装在using语句中。不需要在第一个版本中调用
conn.Close()
。根据经验法则,连接将在
finally
块中关闭:

  • 始终处置
    IDisposable
    s
  • 使用
    最简单

所以…

你能把你的代码显示为纯文本而不是图像吗?“更好”有点主观。最好询问您是否有特定的问题。第一个问题是因为它使用了
using
SqlCommand
确实实现了
IDisposable
,因为它源于
组件
。否则代码甚至无法编译。因此,是的,我会使用
语句保留
。@JonSkeet我没有意识到这一点:(.我会更正我的答案。谢谢我有点不同意您的观点,没有必要对SqlCommand对象语句使用using。
SqlCommand
间接继承自实现终结器的
组件。
using
语句的另一个好处是,一旦退出de>using
块-这意味着即使抛出异常,您的连接仍将被释放。在第二个示例中并非如此。
private void a()
{

    string query = "";

    using (SqlConnection conn = new SqlConnection("connectionstring here"))
    {
        conn.Open();

        using (SqlCommand cmd = new SqlCommand(query, conn))
        {
            cmd.ExecuteQuery();
        }
        conn.Close();
    }
}

private void B()
{

    string query = "";
    SqlConnection conn = new SqlConnection("connectionstring here");

    conn.Open();

    SqlCommand cmd = new SqlCommand(query, conn);
    cmd.ExecuteQuery();

    conn.Close();
}