C#数据库连接使用USING与否?

时间:2014-08-31 20:31:25

标签: c# database-connection sql-server-ce using-statement

我一直想在谷歌上找到答案,但我发现只能回答我的问题。

我的问题是:在创建与数据库的连接时,更优选的方式是什么:没有USING或没有USING

现在,当我从C#开始(但我有一些PHP技能)时,我使用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

在谷歌上,我发现使用USING可以防止忘记关闭SqlCeCommand并处置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(); } 。但你也可以不用如下所示(例如从msdn获取):

SqlCeEonnection conn = null;

我知道上面的两种方法是等价的,但对于熟练的程序员来说,这是最好的方法,为什么呢。可能是第二个较少的字符??

{{1}}和其他2个真正必要吗?

谢谢你们

2 个答案:

答案 0 :(得分:1)

使用并非“必要”,但这是一个好主意,因为它可以为您节省一些问题。

是的,如果你记得在finally关闭,那么你将会下车,但是将它放在使用中并不那么冗长。在我看来,它也使代码更清晰(因为你将变量的范围限制在连接范围内)

答案 1 :(得分:1)

using是确保连接处理的最简洁方法,我喜欢以这种方式编写嵌套的using语句:

using (SqlCeConnection con = new SqlCeConnection(conString))
using (SqlCeCommand query = new SqlCeCommand("SELECT * FROM customers", con))
{
    con.Open();
    using(SqlCeDataReader reader = query.ExecuteReader())
    {
        //...
    }
}

try-catch与您提到的相同。

当然,唯一的例外是当想立即处理连接时。例如,您可能需要在using块之外使用数据读取器,在这种情况下,您不应使用using,因为它会在您退出时释放连接,并且数据读取器将在底层连接关闭时尝试使用它时抛出异常。