gpt4 book ai didi

C# - 通用数据库连接、命令、读取器的类

转载 作者:行者123 更新时间:2023-11-30 15:12:36 24 4
gpt4 key购买 nike

假设我正在设计一个可以处理任何数据库技术的类,以创建连接、执行命令和检索数据等。

如果我需要为现有 RDBMS(如 SQL Server、Oracle、FireBird 等)创建通用数据库处理类,我应该使用哪个 .net 抽象类/接口(interface) {DbConnection、DbCommand、DbParameter,... } 或 {IDbConnection、IDbCommand、IDbParameter、...}?

我应该使用这样的代码吗

public bool CreateConnection(DatabaseTypeEnum type)
{
DbConnection conn ;

if(type==DatabaseTye.Oracle)
{
//....
}
}

public DbDataReader GetData()
{

DbCommand comm;
//...
}

或者,

public bool CreateConnection(DatabaseTypeEnum type)
{
IDbConnection conn ;

if(type==DatabaseTye.Oracle)
{
//....
}
}

public IDbDataReader GetData()
{

IDbCommand comm;
//...
}

还有,为什么?

最佳答案

嗯……完全不同的问题:)

好吧,都不是...

当你这样做时,你将违反开闭原则......那个特定地方的 switch/if 语句让我不舒服:)。

我会将实际创建留给工厂类,您的代码不应该关心它是在与 SQL Server、DB2 还是 Oracle 或其他任何东西对话。

理想情况下,您的代码应该只与 IDbConnection、IDbCommand 等或抽象基类(DbConnection、DbCommand 等)对话。有时我确实发现您需要向上转换到特定的提供程序(例如使用特定方法的 SqlDataReader),但这种情况很少见。

Factory 会将这个 switch/if 语句封装到一个地方,以便于维护。您可以在 app.config 中进一步抽象实际创建。因此,在 app.config 中,您可以选择支持的数据库后端类型,工厂将从那里选择它并为您创建必要的数据库内容。

参见:this .阅读有关创建 DbProviderFactory 和连接部分的信息...

关于C# - 通用数据库连接、命令、读取器的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1107824/

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