题
我正在研究一个项目,该项目使用 C#.NET(位于 Windows 机器上)作为主要语言,并使用 PostgreSQL 作为后端数据库(后端位于 Linux 机器上)。我听说 ODBC.NET 可以轻松集成这两个组件。
有人有过实际设置 C# 和 PostgreSQL 协同工作的经验吗?如果是这样,您对如何去做、发现的问题等有什么建议吗?
解决方案
我正在使用 C# 和 Postgres NPGSQL2 组件,而且它们工作速度很快,我推荐你。
您可以从下载 https://github.com/npgsql/Npgsql/releases
笔记: 如果您想要一个适用于任何数据库的应用程序,您可以使用 数据库提供者工厂 类并使用进行查询 IDb连接, IDb命令, 数据读取器 和/或 IDb事务 接口。
其他提示
NpgSQL - .Net Provider for PostGreSQL - 是一个优秀的驱动程序。如果您使用过更传统的 ADO.NET 框架,那么您真的很幸运。我有连接到 Oracle 的代码,看起来与 PostGreSQL 连接几乎相同。更容易从 Oracle 过渡并重用脑细胞。
它支持您想要通过调用 SQL 执行的所有标准操作,但它也支持调用 功能 (存储过程)。这包括返回 参考光标. 。该文档写得很好,提供了有用的示例,但没有哲学或晦涩难懂。直接从文档中窃取代码,它将立即起作用。
Francisco Figueiredo, Jr 和团队在这方面做得非常出色。
现在可以在 吉图布.
https://github.com/franciscojunior/Npgsql2
更好的信息网站是:http://npgsql.projects.postgresql.org/
阅读文档!http://npgsql.projects.postgresql.org/docs/manual/UserManual.html
有一个 PostgreSQL 的 Linq 提供程序,位于 https://www.nuget.org/packages/linq2db.PostgreSQL/.
我们使用 Visual Studio 2005 和用于 PostgreSql 的 devarado.net 数据提供程序开发了多个应用程序(http://www.devart.com/pgsqlnet/).
该提供程序的优点之一是它提供完整的 Visual Studio 支持。最新版本包括所有新的框架功能,例如 linq。
如今,大多数语言/平台(Java、.NET、PHP、Perl 等)几乎可以与任何 DBMS(SQL Server、Firebird、MySQL、Oracle、PostgresSQL 等)配合使用,所以我一秒钟都不会担心。当然,可能会有一些小故障和小问题,但不会有什么大问题。
正如 jalcom 建议的那样,您应该针对一组接口或至少一组基类(DbConnection、DbCommand 等)进行编程,以获得易于适应的应用程序。
你不应该有太多问题。正如其他人提到的,有许多可用的 .Net PostgreSQL 数据提供程序。您可能需要注意的一件事是,Linq 等功能可能无法使用。
不要让缺乏 Linq 支持阻止您。我使用的模式是始终将数据返回到列表中,然后 linq 离开。当我发现 MySQL 中相同的(诚然是晦涩的)Linq 表达式没有返回与 Sql Server 中相同的数据时,我开始虔诚地这样做。
只需转到“工具”-->“NuGet 包管理器”-->“管理器 Nuget 包管理器”
搜索 NpgSql 然后选择您的项目并单击安装
示例代码
public void Demo()
{
NpgsqlConnection connection = new NpgsqlConnection();
connection = d_connection; // your connection string
connection.Open();
NpgsqlCommand cmd = new NpgsqlCommand();
try
{
cmd.Connection = connection;
cmd.CommandText = "select * from your table name";
cmd.CommandType = System.Data.CommandType.Text;
using (var dataReader = cmd.ExecuteReader())
{
while (dataReader.Read())
{
string answer= dataReader.IsDBNull(0) ? "" : dataReader.GetString(0);
}
dataReader.Dispose();
}
}
catch (Exception e)
{
}
finally
{
cmd.Dispose();
connection.Dispose();
}
}
不要在 postgreSql 中使用大写字母,因为它区分大小写。
Npgsql 是优秀的驱动程序,但到目前为止我发现的唯一问题是数值不适合 System.Decimal,因此只有选项是正确的每个查询或数据库模式
https://github.com/npgsql/Npgsql.EntityFrameworkCore.PostgreSQL/issues/438#issuecomment-486586272