gpt4 book ai didi

c# - 如果要处理 SqlDataReader,是否需要调用 close()?

转载 作者:行者123 更新时间:2023-11-30 13:26:56 26 4
gpt4 key购买 nike

如果我在 using block 中实例化一个 SqlDataReader,我是否需要在读取器上调用 close()

下面显示了查找用户的简单示例。

  using (var connection = new SqlConnection(Settings.GetValue("SqlConnection")))
{
SqlCommand command = new SqlCommand("select * from Users where Id = @Id", connection);
command.Parameters.Add("@Id", SqlDbType.UniqueIdentifier);
command.Parameters["@Id"].Value = id;

using (SqlDataReader reader = command.ExecuteReaderWithRetry())
{
reader.Read();

if (reader.HasRows)
{
//Do work
}

//Is this neccesary?
reader.Close();
}
}

最佳答案

如果它在 using block 中,那么它会自动关闭。您不需要明确关闭它。

顺便说一句,您示例中的 SqlCommand 是一次性的。您也应该在 using block 中创建它,否则它控制的任何资源都不会被释放,直到垃圾收集器收集为止。

您未处置的 SqlCommand 实际上是一个很好的例子,说明了为什么 C# 对 RAII 的模拟不是“真正的”RAII。您必须采取显式操作(制作 block )才能让 RAII 启动,这等同于显式关闭,尽管语法不同。

关于c# - 如果要处理 SqlDataReader,是否需要调用 close()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16366181/

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