为了账号安全,请及时绑定邮箱和手机立即绑定

在“使用”块中,SqlConnection是否在返回或异常时关闭?

在“使用”块中,SqlConnection是否在返回或异常时关闭?

C#
不负相思意 2019-08-02 07:02:34
在“使用”块中,SqlConnection是否在返回或异常时关闭?第一个问题:说我有using (SqlConnection connection = new SqlConnection(connectionString)){     connection.Open();     string storedProc = "GetData";     SqlCommand command = new SqlCommand(storedProc, connection);     command.CommandType = CommandType.StoredProcedure;     command.Parameters.Add(new SqlParameter("@EmployeeID", employeeID));     return (byte[])command.ExecuteScalar();}连接关闭了吗?因为严格来说,我们永远都不会}因为我们return在它之前。第二个问题:这次我有:try{     using (SqlConnection connection = new SqlConnection(connectionString))     {         int employeeID = findEmployeeID();         connection.Open();         SqlCommand command = new SqlCommand("UpdateEmployeeTable", connection);         command.CommandType = CommandType.StoredProcedure;         command.Parameters.Add(new SqlParameter("@EmployeeID", employeeID));         command.CommandTimeout = 5;         command.ExecuteNonQuery();     }}catch (Exception) { /*Handle error*/ }现在,说在try我们得到一个错误,它就会被捕获。连接还关闭吗?因为,我们再次跳过了try直接到catch声明。我是不是想得太线性了using有用吗?介子Dispose()当我们离开using范围?
查看完整描述

3 回答

?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞


  1. 是。

无论哪种方式,当Using块退出时(通过成功完成或错误),它将被关闭。

虽然我觉得更好要像这样组织,因为看到将要发生的事情要容易得多,甚至对于稍后将支持它的新维护程序员来说也是如此:

using (SqlConnection connection = new SqlConnection(connectionString)) {    
    int employeeID = findEmployeeID();    
    try    
    {
        connection.Open();
        SqlCommand command = new SqlCommand("UpdateEmployeeTable", connection);
        command.CommandType = CommandType.StoredProcedure;
        command.Parameters.Add(new SqlParameter("@EmployeeID", employeeID));
        command.CommandTimeout = 5;

        command.ExecuteNonQuery();    
    } 
    catch (Exception) 
    { 
        /*Handle error*/ 
    }}



查看完整回答
反对 回复 2019-08-03
  • 3 回答
  • 0 关注
  • 285 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信