Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
迁移C#应用程序以连接到PostGres数据库_C#_Database_Postgresql_Database Migration - Fatal编程技术网

迁移C#应用程序以连接到PostGres数据库

迁移C#应用程序以连接到PostGres数据库,c#,database,postgresql,database-migration,C#,Database,Postgresql,Database Migration,我继承了一个C#(Windows10,DotNet2.0)数据库应用程序的维护,该应用程序使用OleDb连接到数据库 之所以使用OleDb,是因为它允许应用程序的早期版本只需更改连接字符串即可在数据库(MS Access、SQL Server、Oracle等)之间切换 该应用程序现在将被移动到PostGres数据库。我已成功使用Npgsql.NpgsqlConnection或System.Data.OleDb.OleDbConnection(使用此处找到的IntillSoft postgres数

我继承了一个C#(Windows10,DotNet2.0)数据库应用程序的维护,该应用程序使用OleDb连接到数据库

之所以使用OleDb,是因为它允许应用程序的早期版本只需更改连接字符串即可在数据库(MS Access、SQL Server、Oracle等)之间切换

该应用程序现在将被移动到PostGres数据库。我已成功使用Npgsql.NpgsqlConnection或System.Data.OleDb.OleDbConnection(使用此处找到的IntillSoft postgres数据提供程序…)连接到数据库

OleDb提供商需要高昂的费用(该应用程序由慈善机构托管,我是在自愿的基础上完成的)。因此,我将不得不使用Npgsql.NpgsqlConnection类,但是在应用程序中传递了数百个OleDbConnection对象

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

  • 将应用程序迁移到PostGre
  • 对代码进行最少的更改
  • 保持在数据源之间切换的能力(如果可能)
  • 我想就实现这些目标的最佳方法提出一些建议。我希望有某种方法可以创建我自己的名为OleDbConnection的类,该类可以链接到System.Data.OleDb.OleDbConnection或Npgsql.NpgsqlConnection,具体取决于参数。这将保持数据源的灵活性,并将代码更改保持在最低限度——但我不知道这是否可行,更不用说如何做到了


    感谢

    当您编程到接口时,切换数据库供应商变得简单多了。在将程序的核心逻辑迁移到不同的RDBMS之前,需要修复传递特定连接类型的实例

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


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

    当您编程到接口时,切换数据库供应商变得简单得多。在将程序的核心逻辑迁移到不同的RDBMS之前,需要修复传递特定连接类型的实例

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


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

    尽管这需要您更改一些代码(如果应用程序设计良好,则不会更改太多),但实体框架可能是一个值得研究的问题。“如果应用程序设计良好,则不会更改太多”——“但是有几百个OleDbConnection对象被传递“-所以我一分钱也不赌,@markbaijenseyeah听起来不是一个很好的设计。尽管如此,您仍然可以考虑ODBC,它允许更改提供程序的简单可能的副本,尽管它要求您更改一些代码,但如果应用程序设计得很好,则不太可能,但是实体框架可能是一个很好的事情。-“但是有几百个OLEDB连接对象被传递”-所以我不会赌一分钱,@markbaijenseyeah听起来不是一个很好的设计。但是,重构工具可以帮助其中的一些。您可以考虑ODBC,它允许更改提供者的简单副本。