2 回答
TA贡献1859条经验 获得超6个赞
cmd在这种情况下, using 语句是否对输出参数调用 Dispose ?
不,不是的。它只调用Dispose直接在using语句括号内创建/分配/传递的实例。
您可以使用多个using语句并像这样堆叠它们。
using(DbDataReader reader = getReader("SELECT * FROM Cmds", out DbCommand cmd))
using(cmd)
{
}
还要注意在第一条using语句之后缺少开/关括号,这减少了代码缩进,并且cmd在第二条using语句处理后无法引用。
TA贡献1155条经验 获得超0个赞
您可以编写一个简单的 IDisposable 包装类并返回:
public sealed class DbData: IDisposable
{
public DbData(DbDataReader reader, DbCommand command)
{
Reader = reader;
Command = command;
}
public void Dispose()
{
Reader .Dispose();
Command.Dispose();
}
public DbDataReader Reader { get; }
public DbCommand Command { get; }
}
然后你GetReader()会返回一个DbData:
public DbData GetReader(string sql)
{
DbDataReader reader = ...;
DbCommand command = ...;
return new DbData(reader, command);
}
然后你可以将它与using.
using (var result = GetReader("SELECT * FROM Cmds"))
{
// Do something with result.Command and result.Reader
}
- 2 回答
- 0 关注
- 222 浏览
添加回答
举报