2017-09-05 39 views
1

我继承了使用OleDb连接到数据库的C#(Windows 10,dot net 2.0)数据库应用程序的维护。迁移C#应用程序以连接PostGres数据库

OleDb已被使用,因为它允许先前版本的应用程序通过简单地更改连接字符串在数据库(MS Access,SQL Server,Oracle等)之间切换。

该应用程序现在将被移至PostGres数据库。我已经成功地管理使用或者Npgsql.NpgsqlConnection或System.Data.OleDb.OleDbConnection连接到数据库(使用Intillisoft Postgres的数据提供者在这里找到... http://www.pgoledb.com

OLEDB提供程序需要一个大得惊人的费用(该应用程序由慈善机构主持,我在自愿的基础上进行工作)。所以我将不得不使用Npgsql.NpgsqlConnection类,但在应用程序中传递了数百次的OleDbConnection对象。

我的目标是(按重要性排序)

  1. 将应用程序迁移到PostGre
  2. 做最小的变化的代码
  3. 保持到数据源之间切换的能力(如果可能)

我想请一些关于实现这些目标的最佳方法的建议。我希望有一些方法可以创建我自己的类,名为OleDbConnection,它可以根据参数链接到System.Data.OleDb.OleDbConnection或Npgsql.NpgsqlConnection。这将保持数据源的灵活性,并将代码更改保持在最低限度 - 但我不知道这是否可能,更不用说如何做到这一点!

感谢

+0

虽然它会要求你改变一些代码片段,(如果应用程序设计的很好,不要太多),但是实体框架可能是一件很好的事情。 –

+2

“如果应用程序设计得不是很好” - “但有几百个OleDbConnection对象正在传递” - 所以我不会在它上面投一分钱,@MarkBaijens – Fildor

+0

是的,听起来不像是一个非常好的设计。仍然重构工具可以帮助解决其中的一些问题。 –

回答

2

开关DB供应商,当你面向接口编程变得简单了很多。传递特定连接类型的实例是在将程序的核心逻辑迁移到其他RDBMS之前需要解决的问题。

DB连接的通用接口是IDbConnection:OleDbConnection和NpgsqlConnection都实现它。遍历源代码树,用IDbConnection替换所有出现的OleDbConnection,然后重新编译该项目。您可能需要将其他类型转换为接口,例如OleDbCommand到IDbCommand。

如果这一步成功(应该是),剩余的迁移将会简单得多。如果在重新编译时出现错误,您需要询问有关转换特定于OleDB的代码的具体问题。

相关问题