2

可能重复:
试图更好地理解“使用”语句

我真的阅读了所有其他帖子,但没有人真正回答我的问题。

这是我返回表格的函数

        public DataTable ReturnTable()
        {
            DataTable dt = new DataTable();   
            using (SqlConnection con = new SqlConnection(mainConnectionString))
            {
                con.Open();                             
                using (SqlCommand cmd = new SqlCommand())
                {
                    cmd.CommandType = CommandType.Text;    
                    SQL = " SELECT * from table";                        
                    cmd.CommandText = SQL;                                            
                    using (SqlDataAdapter da = new SqlDataAdapter(cmd))
                    {
                        da.Fill(dt);
                    }
                }
            }           
            return dt;
        }

前一个与以下(我在发现“使用”之前一直使用的那个)相比有什么优势:

public DataTable ReturnTable()
            {
                DataTable dt = new DataTable();   
                SqlConnection con = new SqlConnection(mainConnectionString);
                con.Open();                             
                SqlCommand cmd = new SqlCommand();
                cmd.CommandType = CommandType.Text;    
                SQL = " SELECT * from table";                        
                cmd.CommandText = SQL;                                            
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(dt);
                con.Close();
                return dt;
            }

对于第二个,con、cmd 和 da 是否正确处理?第二个有什么问题吗?

谢谢!

4

4 回答 4

4

第二个有什么问题吗?

只要您的代码中没有异常,这对于 的工作方式相同con,因为在这种情况下Close()实际上Dispose()是相同的。它不会立即处理或处理,而是等到它们被垃圾收集后释放它们的资源。dacmd

这样做的好处using是,即使在出现异常或提前退出方法的情况下(您return在方法中间添加了 a ),您的资源仍然会被释放。

于 2012-12-14T23:29:22.617 回答
0

优点是该using模式调用接口Dispose()上的方法IDisposable,保证您可能错过的任何清理逻辑都得到正确执行,即使抛出异常也是如此。

在实践中,实现IDisposable的对象持有非托管资源,这些资源在被调用时会被清理Dispose()。所以打电话Close()可能还不够。

于 2012-12-14T23:28:57.267 回答
0

不,它们一样。这就是using. _

如果你的代码抛出异常会发生什么?在垃圾收集器碰巧找到它之前,这些对象不会被释放。

于 2012-12-14T23:29:27.903 回答
0

在这种情况下,“使用”尝试实现RAII模式,这在处理有限资源(例如数据库连接)时特别有用。

于 2012-12-15T03:52:44.703 回答