C# 数据库连接是否使用 USING
本文关键字:USING 是否 数据库连接 | 更新日期: 2023-09-27 18:20:06
我试图像往常一样在谷歌上找到我的答案,但我只找到了我问题的部分答案。
我的问题是:在创建与数据库的连接时,更可取的方法是什么:没有或有USING
。
现在,当我开始使用 C# 时(但我在 PHP 方面有一些技能(,我在网上学习了如下所示的USING
方法:
string conString = Properties.Settings.Default.mattDatabaseConnectionString;
using (SqlCeConnection con = new SqlCeConnection(conString))
{
using (SqlCeCommand query = new SqlCeCommand("SELECT * FROM customers", con))
{
SqlCeDataReader reader = query.ExecuteReader();
}
}
在谷歌上,我发现使用使用可以防止忘记关闭ExecuteReader
并处理SqlCeCommand
。但是你也可以像下面这样不这样做(示例取自msdn(:
SqlCeConnection conn = null;
SqlCeCommand cmd = null;
SqlCeDataReader rdr = null;
try
{
// Open the connection and create a SQL command
//
conn = new SqlCeConnection("Data Source = AdventureWorks.sdf");
conn.Open();
cmd = new SqlCeCommand("SELECT * FROM DimEmployee", conn);
rdr = cmd.ExecuteReader();
// Iterate through the results
//
while (rdr.Read())
{
int employeeID = rdr.GetInt32(0); // or: rdr["EmployeeKey"];
string lastName = rdr.GetString(5); // or: rdr["FirstName"];
}
// Always dispose data readers and commands as soon as practicable
//
rdr.Close();
cmd.Dispose();
}
finally
{
// Close the connection when no longer needed
//
conn.Close();
}
我知道上面的 2 种方法是等效的,但对于熟练的程序员来说,最好的方法是什么,为什么。可能是字符较少的第二个??
SqlCeEonnection conn = null;
和其他两个真的有必要吗?
谢谢大家
using
是确保连接被释放的最干净方法,我喜欢以这种方式编写嵌套的 using 语句:
using (SqlCeConnection con = new SqlCeConnection(conString))
using (SqlCeCommand query = new SqlCeCommand("SELECT * FROM customers", con))
{
con.Open();
using(SqlCeDataReader reader = query.ExecuteReader())
{
//...
}
}
尝试捕获等效于您提到的。
当然,唯一的例外是当您不想立即释放连接时。例如,您可能需要在 using
块之外使用数据读取器,在这种情况下,您不应使用 using
,因为它会在您退出连接时释放连接,并且当您尝试在基础连接关闭时使用它时,数据读取器将引发异常。
使用不是"必要的",但这是一个好主意,因为它可以为您节省一些问题。
是的,如果你记得在finally
关闭,那么你就会下车,但只是把它放在使用中就不那么冗长了。在我看来,它还使代码更干净(因为您将变量的范围限制在连接范围内(