【发布时间】:2012-11-10 18:19:53
【问题描述】:
我正在开发一个需要使用“相似”模式连接到不同数据库类型(SQL Server、Oracle、DB2)的应用程序。我说“相似”模式是因为表名、列等......是相同的,但底层数据类型特定于该数据库类型。例如,在 SQL Server 和 Oracle 数据库中,我都有一个名为“tablename”的表和一个名为“column”的列。 'column' 的数据类型对于 Oracle 是 NUMBER,对于 SQL Server 是 float。
我可以通过通用 ADO 接口获取适当的提供程序工厂、连接和查询,但我不确定并且遇到问题的是我应该如何访问此列。
对于 Oracle,我相信我应该对 NUMBER 数据类型字段使用访问器函数“GetDecimal()”,事实上,似乎使用任何其他访问器,例如 GetInt32()、GetDouble(),我得到一个强制转换异常.对于 SQL Server,我应该使用访问器函数“GetDouble()”。无论底层数据库数据类型如何,是否有一种方法/策略可以使用单个访问器函数获取此值?请注意,我无法控制后端数据库架构。
谢谢,感谢您的回复。
【问题讨论】:
-
只是我的两分钱,我知道您说您无权访问底层数据库架构,但我仍然认为您应该从那里开始。除非更改架构,否则我看不到避免使用条件(基于您连接到的数据库)来解决此类问题的方法。
-
我建议为每个数据库使用不同的接口。这将确保您不会过于紧密地耦合并具有未来架构更改的灵活性。