我有这段代码:


SqlConnection conn;
string strconString = System.Configuration.ConfigurationManager.ConnectionStrings["SQLCONN"].ToString();
conn = new SqlConnection(strconString);
string cmdstr = "select status from racpw where vtgid = " + vtgid;
SqlCommand cmdselect = new SqlCommand(cmdstr, conn);
conn.Open();
SqlDataReader dtr = cmdselect.ExecuteReader();
if (dtr.Read())
{
return;
}
else
{
...
}
dtr.Close();
conn.Close();

现在我的问题是。
如果返回,我的连接和 dtr 会自动关闭还是应该使用 bool 变量并在连接关闭后执行返回?

最佳答案

您必须在返回前关闭连接。
最好的方法是使用块,因为 SqlConnection 实现了 IDisposable 接口(interface)。在这种情况下,您不必记住即使抛出异常也必须关闭连接。

请参阅下面的示例:

using (var conn = new SqlConnection(strconString))
{
    string cmdstr =
        "select status from racpw where vtgid = " + vtgid;
    using (var cmdselect = new SqlCommand(cmdstr, conn))
    {
        conn.Open();
        using(var dtr = cmdselect.ExecuteReader())
        {
            if (dtr.Read())
            {
                return;
            }
            else
            {
                ...
            }
        }
    }
}

关于c# 是否关闭 sqlconnection 和 sqldatareader?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4385837/

10-08 22:47