質問
C#.NET(Windowsボックス上にある)を主言語として使用し、PostgreSQLをバックエンドデータベース(バックエンドはLinuxボックス上にある)として使用するプロジェクトに取り組むことを検討しています。ODBC.NET を使用すると、これら 2 つのコンポーネントを簡単に統合できると聞きました。
実際に C# と PostgreSQL を連携させて設定した経験のある人はいますか?もしそうなら、それに取り組む方法や発見した問題などについて何か提案はありますか?
解決
私はC#とPostgresを使用して作業しています Npgsql2 コンポーネントであり、高速に動作するので、お勧めします。
からダウンロードできます https://github.com/npgsql/Npgsql/releases
注記: 任意のデータベースで動作するアプリケーションが必要な場合は、 Dbプロバイダーファクトリー クラスを作成し、次を使用してクエリを作成します IDb接続, IDbコマンド, IDataReader および/または IDbトランザクション インターフェース。
他のヒント
Npgsql - PostGreSQL 用 .Net Provider - は優れたドライバーです。より伝統的な ADO.NET フレームワークを使用したことがある場合は、ここで本当に幸運です。PostGreSQL 接続とほぼ同じように見える Oracle に接続するコードがあります。Oracle からの移行と脳細胞の再利用が容易になります。
SQL の呼び出しで実行したい標準的な機能をすべてサポートしていますが、呼び出しもサポートしています。 機能 (ストアド プロシージャ)。これには、 参照カーソル. 。このドキュメントはよく書かれており、哲学的になったり難解になったりすることなく、役立つ例が提供されています。ドキュメントからコードをそのまま盗むと、すぐに機能します。
フランシスコ・フィゲイレド・ジュニアとチームはこれに関して素晴らしい仕事をしてくれました。
現在、以下で利用可能です ギットハブ.
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 用の devart ado.net データ プロバイダーを使用して、いくつかのアプリケーションを開発しました (http://www.devart.com/pgsqlnet/).
このプロバイダーの利点の 1 つは、Visual Studio の完全なサポートを提供することです。最新バージョンには、linq などの新しいフレームワーク機能がすべて含まれています。
現在、ほとんどの言語/プラットフォーム (Java、.NET、PHP、Perl など) はほぼすべての DBMS (SQL Server、Firebird、MySQL、Oracle、PostgresSQL など) で動作するため、1 秒も心配する必要はありません。確かに不具合や小さな問題はあるかもしれませんが、致命的な問題はありません。
jalcom が提案したように、アプリケーションを容易に適応させるには、インターフェイスのセット、または少なくとも基本クラスのセット (DbConnection、DbCommand など) に対してプログラムする必要があります。
あまり多くの問題を抱えるべきではありません。他の人が述べたように、利用可能な .Net PostgreSQL データ プロバイダーは数多くあります。注意すべき点の 1 つは、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 に適合しないため、各クエリまたは DB スキーマで正しいオプションのみであることです。
https://github.com/npgsql/Npgsql.EntityFrameworkCore.PostgreSQL/issues/438#issuecomment-486586272