在我之前的一個問題中,有人建議不要使用 trycatch 并最終關閉連接,我應該只使用“使用”。有人可以給我一個例子嗎?
我有這段代碼,我該如何使用它?
try
{
conn3.Open();
string sql_check = "SELECT (time_in) FROM timeinout WHERE employee_id = @employee_id AND date = @date";
using var cmd_check = new NpgsqlCommand(sql_check, conn3);
cmd_check.Parameters.AddWithValue("employee_id", id);
cmd_check.Parameters.AddWithValue("date", date);
cmd_check.Prepare();
var reader = cmd_check.ExecuteReader();
if (reader.Read())
{
return true;
}
else
{
return false;
}
}
catch
{
return false;
}
finally
{
conn3.Close();
}
uj5u.com熱心網友回復:
using不是替代品try...catch...finally。它使您能夠取消finally塊,但是,如果可以拋出例外,您仍然需要捕獲它。該using塊保證創建的物件將被釋放,無論是否引發例外。這個:
var obj = new SomeType();
try
{
// Use obj here.
}
catch
{
// Handle exception here.
}
finally
{
obj.Dispose();
}
可以并且應該替換為:
using (obj = new SomeType())
{
try
{
// Use obj here.
}
catch
{
// Handle exception here.
}
}
基本上,如果已經有例外處理,那么您仍然需要例外處理,但您不需要在finally塊中關閉/處置本地創建的物件。如果你在你的finally街區里做任何其他事情,那么你仍然需要它。
在您的情況下,您應該使用using陳述句創建連接、命令和資料閱讀器:
using (var connection = new NpgsqlConnection(connectionString))
using (var command = new NpgsqlCommand(query, connection))
{
try
{
connection.Open();
using (var reader = command.ExecuteReader())
{
return reader.HasRows;
}
}
catch
{
return false;
}
}
資料讀取器將在內部using塊的末尾關閉,連接將在外部using塊的末尾關閉。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/498392.html
