我可以将事件附加到将处理SqlCommand连接的SqlCommand.Disposed事件吗?这是我正在测试的代码:
public static SqlCommand GetCommand(string query, SqlParameter[] paramCollection, bool isStoredProcedure)
{
return new DBSettings().CreateCommand(query, paramCollection, isStoredProcedure);
}
public SqlCommand CreateCommand(string query, SqlParameter[] paramCollection, bool isStoredProcedure)
{
SqlConnection conn = new SqlConnection(connString);
conn.Open();
SqlCommand cmd = new SqlCommand(query, conn);
if (paramCollection.Length > 0)
cmd.Parameters.AddRange(paramCollection);
if (isStoredProcedure)
cmd.CommandType = CommandType.StoredProcedure;
cmd.Disposed += new EventHandler(cmd_Disposed);
return cmd;
}
protected void cmd_Disposed(object sender, EventArgs e)
{
SqlCommand cmd = (SqlCommand)sender;
cmd.Connection.Dispose();
}
我希望能够在一个using块中调用静态方法GetCommand,当它完成后,处理这样的连接:
using (SqlCommand cmd = GetCommand(query, paramCollection, false))
{
//code to execute
}
答案 0 :(得分:2)
你的方法应该有用,但它确实是违反直觉的,我建议重新考虑一下这个设计。依赖对象(命令)控制它所依赖的对象(连接)的生命周期?如果要在同一连接上运行更多命令,该怎么办?交易怎么样?
答案 1 :(得分:1)
您的代码应该可以正常工作
您可以通过在Disposed
处理程序中设置断点来测试它。
您还可以使用匿名方法缩短它:
cmd.Disposed += delegate { conn.Dispose(); };