我是 Npgsql 的新手,我的 C# 代码如下:
我还需要用吗:
conn.Open(); conn.Close();
如果我已经使用了 using 语句?,我尝试删除它但没有任何反应。
try
{
using (NpgsqlConnection conn = new NpgsqlConnection(Models.AppSettings.PG_SQL.Connection_String))
{
conn.Open(); // do I still need this?, I remove it, but it still working properly
try
{
string sql = "Select * From mytable1"
using (var dr = conn.ExecuteReader(sql, new { } ))
{
if (dr.Read())
{
// do some process
}
}
}
catch (Exception e)
{
Helper.SaveLogAsync("Learning.Test: " + e.ToString(), Models.Errs.ErrType.Err);
}
finally { }
conn.Close(); // do I still need this?, I remove it, but it still working properly
}
}
catch (Exception e)
{
Helper.SaveLogAsync("Learning.Test: " + e.ToString(), Models.Errs.ErrType.Err);
}
finally { }
是的,在 C# 中使用
conn.Open()
语句时,您可以安全地删除 conn.Close()
和 using
。 using 语句确保在退出块时在 Dispose()
对象上调用 NpgsqlConnection
方法,它负责关闭连接。
没有
conn.Open()
和conn.Close()
调用的代码:
try
{
using (NpgsqlConnection conn = new NpgsqlConnection(Models.AppSettings.PG_SQL.Connection_String))
{
try
{
string sql = "Select * From mytable1";
using (var dr = conn.ExecuteReader(sql, new { }))
{
if (dr.Read())
{
// do some process
}
}
}
catch (Exception e)
{
Helper.SaveLogAsync("Learning.Test: " + e.ToString(), Models.Errs.ErrType.Err);
}
}
}
catch (Exception e)
{
Helper.SaveLogAsync("Learning.Test: " + e.ToString(), Models.Errs.ErrType.Err);
}
在这种情况下,您不需要显式调用
conn.Open()
,因为如果连接尚未打开,ExecuteReader
方法将自动打开连接。同样,您不需要调用 conn.Close()
,因为 using
语句负责处理连接,包括关闭它。