gpt4 book ai didi

c# - SqlDataAdapter 是否在 Fill() 函数后关闭 SqlConnection?

转载 作者:太空狗 更新时间:2023-10-29 18:11:10 25 4
gpt4 key购买 nike

SqlDataAdapter 是在 Fill() 函数之后关闭 SqlConnection 还是我需要自己关闭它?

string cnStr = @"Data Source=TEST;Initial Catalog=Suite;Persist Security Info=True;User ID=app;Password=Immmmmm";
cn = new SqlConnection(cnStr);
SqlCommand cmd = new SqlCommand("SELECT TOP 10 * FROM Date", cn);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);

DataSet ds = new DataSet();
adapter.Fill(ds);

cn.Close() // ????????

Console.WriteLine(ds.Tables[0].Rows.Count);
Console.WriteLine(cn.State);

最佳答案

在您当前的使用情况下,它将为您关闭:

If the IDbConnection is closed before Fill is called, it is opened to retrieve data and then closed. If the connection is open before Fill is called, it remains open.

http://msdn.microsoft.com/en-us/library/zxkb3c3d.aspx

我认为最好自己用 using 语句明确地满足它:

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

// Do Stuff.

} // Closes here on dispose.

这通常更具可读性,并且不依赖于人们理解 SqlDataAdapter.Fill 的内部工作原理,仅依赖于 using 语句和连接。

但是,如果您知道连接在适配器使用它之前关闭(例如,您刚刚创建了连接)并且它没有用于任何其他用途,那么您的代码是绝对安全的并且有效。

就我个人而言,我会这样写:

    string cnStr = "Data Source=TEST;Initial Catalog=Suite;Persist Security Info=True;User ID=app;Password=Immmmmm";
DataSet ds = new DataSet();

using (SqlConnection cn = new SqlConnection(cnStr))
using (SqlCommand cmd = new SqlCommand("SELECT TOP 10 * FROM Date", cn))
using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
{
conn.Open();
adapter.Fill(ds);
}

关于c# - SqlDataAdapter 是否在 Fill() 函数后关闭 SqlConnection?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7388744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com