何时何地调用dispose方法c#?

Ye *_*ung 1 c# asp.net

我有这样下面的代码来检索数据库数据,当我从Visual Studio中运行代码分析,它表明我调用Dispose方法SqlConnection,DataTableSqlDataAdapter对象.

        SqlConnection sqlconn = new SqlConnection(ConfigurationManager.ConnectionStrings["connstr"].ConnectionString);
        SqlCommand cmd = sqlconn.CreateCommand();
        cmd.CommandText = "SELECT * FROM tbl_serial WHERE serial = @serial";
        cmd.Parameters.AddWithValue("@serial", txtQuery.Text);
        DataTable dt = new DataTable();
        SqlDataAdapter da = new SqlDataAdapter();
        try
        {
            sqlconn.Open();
            da.SelectCommand = cmd;
            da.Fill(dt);

        }
        catch (SqlException ex)
        {
            lblStatus.Text = ex.Message;
        }
        finally
        {
            sqlconn.Close();
        }

        if (dt.Rows.Count > 0)
        {
            lblStatus.Text = "FOUND!";
        }
        else
        {
            lblStatus.Text = "NOT FOUND!";
        }
Run Code Online (Sandbox Code Playgroud)

这是我第一次这样做,我sqlconn就像这样调用dispose方法-

        finally
        {
            sqlconn.Close();
            sqlconn.Dispose();
        }
Run Code Online (Sandbox Code Playgroud)

但是,Visual Studio警告我这样 -

CA2202:Microsoft.Usage:对象'sqlconn'可以在方法'test_search.Unnamed1_Click(object,EventArgs)'中多次处理.为避免生成System.ObjectDisposedException,不应在对象上多次调用Dispose:Lines:41

所以我想知道何时应该正确调用dispose方法.

T.J*_*der 6

不是dispose直接调用,而是使用using语句,当代码执行移出其关联的块时,它将确保为您执行此操作.例如:

SqlConnection con;

using (con = new SqlConnection(/* ... */)) {
    // Do your stuff with `con`
}
Run Code Online (Sandbox Code Playgroud)

这是一般用于一次性用品的模式.