不,它不安全,强制转换永远不会安全,并且在您的应用程序运行时它可能随时发生故障。虽然SqlConnection
确实从DbConnection
您那里派生,但不能保证database.CreateConnection()
会返回 a SqlConnection
,因为这可以在配置文件中进行参数化。另外为什么你需要投到SqlConnection
?最好使用层次结构中较高的类,以避免将您的代码与特定实现耦合,这将使您的代码无法单独测试。
虽然 EnterpriseLibrary 在保持事物抽象方面做得相当好,但你正在用这个演员杀死一切。此外,您应该确保一次性资源始终得到妥善处理。这个怎么样:
Database database = DatabaseFactory.CreateDatabase("connection string");
using (var conn = database.CreateConnection())
using (var cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = "SELECT id FROM foo";
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
// TODO: work with the results here
}
}
}
这样,您的代码对配置文件中的数据库更改就不会那么脆弱。当然,你仍然有这个 SQL 硬编码,并且有 ORM 可以处理这种情况。它们还将允许您专注于应用程序的实际领域,而不是浪费时间编写 SQL 查询和从一个数据库提供程序转换到另一个数据库提供程序。但是对于一个简单的应用程序来说,这是可以的。