日期:2014-05-18  浏览次数:20450 次

这种"using"打开数据库的方法,没见它关闭数据库,这样做好吗?
using   (SqlConnection   conn   =   new   SqlConnection(sConnectionString))
        {
                conn.Open();
                using   (SqlCommand   cmd   =   new   SqlCommand( "insert   into   tbUser   (UserID,   UserName,
                UserPassword,UserEmail,UserGender,UserIsMarried,UserFace)   values   (@UserID,  
                @UserName,@UserPassword,@UserEmail,@UserGender,@UserIsMarried,@UserFace) ",   conn))
                {
                        cmd.Parameters.AddWithValue( "@UserID ",   sUserID);
                        cmd.Parameters.AddWithValue( "@UserName ",   sUserName);
                        cmd.Parameters.AddWithValue( "@UserPassword ",   tb_Password1.Text);
                        cmd.Parameters.AddWithValue( "@UserEmail ",   tb_UserEmail.Text);
                        cmd.Parameters.AddWithValue( "@UserGender ",   rbl_UserGender.SelectedValue);
                        cmd.Parameters.AddWithValue( "@UserIsMarried ",   cb_UserIsMarried.Checked);
                        cmd.Parameters.AddWithValue( "@UserFace ",   ddl_UserFace.SelectedValue);
                        cmd.ExecuteNonQuery();
                }
        }


------解决方案--------------------
using是Dispose,会销毁链接对象的
ASP.NET中不建议用using,最好调用.Close方法使其释放回连接池,以便复用~
------解决方案--------------------
SqlConnection 实现了 派生至 DbConnection 实现了 又实现了

IDisposable 接口

而 Dispose 方法内部调用了Close方法
所以使用 using 后会自动关闭 并释放资源
------解决方案--------------------
using 的对象必须实现 IDisposeabe 接口
------解决方案--------------------
用ilasm看看,using已经自动被展开为try{}finally了,并在finally中调用了Dispose方法。using只是对你隐藏了,减少了代码写作量而已,并不是没有调用关闭数据库连接。