我正在使用Enterprise Library 4.1。
我在执行代码时使用:
using ( _db = DatabaseFactory.CreateDatabase("NLayerDB") )
{
DbCommand dbCommand = _db.GetStoredProcCommand("someSPName");
_db.AddInParameter(dbCommand, "Id", DbType.Int32, id);
result= _db.ExecuteNonQuery(dbCommand);
}
我收到以下错误:
using语句中使用的 Microsoft.Practices.EnterpriseLibrary.Data.Database
类型必须可隐式转换为System.IDisposable
在此处使用 USING 语句的确切问题是什么?
答案 0 :(得分:2)
你没有通过实际使用获得任何东西(正如你所说,它实际上不会编译)。
使用“语句”包装对象创建代码可确保在“using”块退出时处理您创建的对象。只有实现IDisposable的对象才有意义,因为其他类型无法显式处理。
您可以安全地删除您的使用区块并以此结束:
_db = DatabaseFactory.CreateDatabase("NLayerDB");
DbCommand dbCommand = _db.GetStoredProcCommand("someSPName");
_db.AddInParameter(dbCommand, "Id", DbType.Int32, id);
result = _db.ExecuteNonQuery(dbCommand);
如果DbCommand实现了IDisposable(我不确定,从未使用过EntLib的DAAB),那么您可能希望将该部分代码包装在using块中:
_db = DatabaseFactory.CreateDatabase("NLayerDB");
using (DbCommand dbCommand = _db.GetStoredProcCommand("someSPName"))
{
_db.AddInParameter(dbCommand, "Id", DbType.Int32, id);
result = _db.ExecuteNonQuery(dbCommand);
}
答案 1 :(得分:1)
Microsoft.Practices.EnterpriseLibrary.Data.Database未实现IDisposable,这是using statement的要求。
DbCommand对象确实实现了IDisposable,因此在using语句中使用它可能更合适。