[英]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()
}
}
}
}
现在,我想知道的是,上面的代码
谁可以帮我这个事?
如果只想扔掉它,则不需要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块也将执行并在连接打开的情况下将其关闭。
这背后的原因是,想想下面的情况。
DBUtility objDB = new DBUtility()
上面的语句创建类的对象,并从构造函数初始化sqlconnection变量。
现在,我正在使用对象objDB一对一地执行多个查询。 为此,它应该只初始化一次sqlconnection对象,并在整个生命周期中使用它(生命obj objDB)。
在您的情况下,sqlconnection将在调用方法时初始化。
因此,只需将连接初始化一次,然后为每个操作打开/关闭它。 处置objDB时,垃圾收集器会自动处置您的连接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.