我一直想在谷歌上找到答案,但我发现只能回答我的问题。
我的问题是:在创建与数据库的连接时,更优选的方式是什么:没有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个真正必要吗?
谢谢你们
答案 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
,因为它会在您退出时释放连接,并且数据读取器将在底层连接关闭时尝试使用它时抛出异常。