gpt4 book ai didi

C# DbConnection 转换为 SqlConnection

转载 作者:IT王子 更新时间:2023-10-29 04:54:19 26 4
gpt4 key购买 nike

我在一个应用程序中找到了这段代码

Database database = DatabaseFactory.CreateDatabase("connection string");
DbConnection connection = database.CreateConnection();
connection.Open();
SqlConnection sqlConnection = (SqlConnection)connection;

是否安全,SqlConnection 派生自 DbConnection。数据库来自 Microsoft.Practices.EnterpriseLibrary.Data。根据文档 CreteDatabase 返回 DbConnection。

最佳答案

不,它不安全,类型转换从来都不是安全的,它可能会在您的应用程序运行时随时崩溃。虽然 SqlConnection 确实派生自 DbConnection,但您不能保证 database.CreateConnection() 会像这样返回 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 查询以及从一个数据库提供商转换到另一个数据库提供商。但对于一个简单的应用程序来说,这是可以的。

关于C# DbConnection 转换为 SqlConnection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3647492/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com