繁体   English   中英

在ADO.NET中处理“使用”语句

[英]Working on “using” statement in ADO.NET

每当我走出方法时,我都想适当地处置SqlConnection对象。 因此,即时通讯使用“ using”语句,如下所示。

public int Hello()
{
   using(SqlConnection con=new SqlConnection(constring))
   {
      using(SqlCommand cmd=new SqlCommand(Query,con))
      {
       try
       {
          con.Open();
          return cmd.ExecuteNonQuery();
       }
       catch(Exception ex)
       {
          throw ex;
       }
       finally
       {
          con.Close()
       }
      }
   }
}

现在,我想知道的是,上面的代码

  1. 当ExecuteNonQuery中发生异常时,请正确处理连接。
  2. 确保我们不会出现任何ConnectionPool问题
  3. 确保正确返回数据
  4. 如果SqlConnection中发生异常,它将处置该对象吗?

谁可以帮我这个事?

如果只想扔掉它,则不需要try/catch ,只需将代码更改为此:

public int Hello()
{
    using(SqlConnection con=new SqlConnection(constring))
    {
        using(SqlCommand cmd=new SqlCommand(Query,con))
        {
            con.Open();
            return cmd.ExecuteNonQuery();
        }
    }
}

并且无论发生什么情况(是否发生异常),如果打开并处理该连接,它将关闭。

当ExecuteNonQuery中发生异常时,请正确处理连接。

确保我们不会出现任何ConnectionPool问题

我想你的意思是执行查询后,连接将被适当地释放。 如果这是您的问题,那么您不应该使用这种方法。

确保正确返回数据

使用与返回数据无关

如果SqlConnection中发生异常,它将处置该对象吗?

虽然您可以将代码重写为

using(SqlConnection con=new SqlConnection(constring))
   {
      using(SqlCommand cmd=new SqlCommand(Query,con))
      {
       try
       {
          con.Open();
          return cmd.ExecuteNonQuery();
       }
       catch(Exception ex)
       {
          throw;
       }       
      }
   }

您不应将using语句用于sqlconnection。

使用(SqlConnection con =新的SqlConnection(constring))

最好使用try,catch和finally块关闭连接。 因此,即使在try&catch中发生异常,finally块也将执行并在连接打开的情况下将其关闭。

这背后的原因是,想想下面的情况。

  1. 创建处理所有数据库操作的类的对象,例如DBUtility objDB = new DBUtility()

上面的语句创建类的对象,并从构造函数初始化sqlconnection变量。

  1. 现在,我正在使用对象objDB一对一地执行多个查询。 为此,它应该只初始化一次sqlconnection对象,并在整个生命周期中使用它(生命obj objDB)。

  2. 在您的情况下,sqlconnection将在调用方法时初始化。

  3. 因此,只需将连接初始化一次,然后为每个操作打开/关闭它。 处置objDB时,垃圾收集器会自动处置您的连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM