2008-09-05 7 views
48

Ich arbeite an einem Projekt, das C# .NET (auf einer Windows-Box sitzend) als primäre Sprache und PostgreSQL als Backend-Datenbank verwendet (das Backend befindet sich auf einer Linux-Box). Ich habe gehört, dass ODBC.NET die einfache Integration dieser beiden Komponenten ermöglicht.C# .NET + PostgreSQL

Hat jemand Erfahrung gehabt, C# und PostgreSQL tatsächlich zusammen zu setzen? Wenn ja, haben Sie Vorschläge, wie Sie vorgehen, welche Probleme Sie gefunden haben usw.?

Antwort

47

Ich arbeite mit C# und Postgres mit Npgsql2 Komponente, und sie arbeiten schnell, ich empfehle Ihnen.

können Sie kostenlos herunterladen von https://github.com/npgsql/Npgsql/releases

Hinweis: Wenn Sie eine Anwendung möchten, die mit jeder Datenbank funktioniert können Sie die DbProviderFactory Klasse verwenden und Ihre Anfragen IDbConnection, IDbCommand, IDataReader mit make und/oder IDbTransaction Schnittstellen.

+1

der Download-Link nicht gefunden: Angeforderte Seite nicht gefunden (Fehler 404) –

+0

Link aktualisiert :) – dariol

+1

FYI: Es wird offiziell abgeraten, die Schnittstellen zu verwenden, stattdessen möchte Microsoft Sie die abstrakten Basisklassen in 'System.Data verwenden. Gewöhnlich. Es ist überhaupt nicht dokumentiert, aber es scheint, dass MS zum Zeitpunkt der .NET 2.0-Version die Schnittstellen zugunsten der Basisklassen intern verwarf, ohne dies über ihr Attribut "Obsolete" zu kommunizieren. [Diese Ausgabe auf Github] (https://github.com/dotnet/corefx/issues/3480) ist eine interessante Lektüre in API-Kompatibilität :-) – mfeineis

1

Heute können die meisten Sprachen/Plattformen (Java, .NET, PHP, Perl usw.) mit fast jedem DBMS (SQL Server, Firebird, MySQL, Oracle, PostgresSQL usw.) arbeiten, also würde ich keine Sekunde sorgen . Sicher, es könnte Störungen und kleine Probleme geben, aber kein Showstopper.

Wie von jalcom vorgeschlagen, sollten Sie gegen eine Reihe von Schnittstellen oder zumindest eine Reihe von Basisklassen (DbConnection, DbCommand usw.) programmieren, um eine leicht anpassbare Anwendung zu haben.

1

Sie sollten nicht zu viele Probleme haben. Wie bereits erwähnt, gibt es viele .Net PostgreSQL-Datenprovider. Eine Sache, auf die Sie achten sollten, ist, dass Funktionen wie Linq wahrscheinlich nicht verwendet werden können.

10

Es gibt einen Linq-Provider für PostgreSQL unter https://www.nuget.org/packages/linq2db.PostgreSQL/.

+0

Dieses Projekt scheint jetzt tot zu sein. Der Link in der Antwort wird nicht aufgelöst. dblinq.codeplex.com verweist auf github.com/dblinq/dblinq2007, das besagt, dass es nun archiviert und nicht mehr gepflegt ist. – Hydrargyrum

+0

In ein verwaltetes Projekt geändert. Ich habe es aber nicht ausprobiert. –

2

Wir haben mehrere Anwendungen mit Visual Studio 2005 mit dem devart ado.net Datenprovider für PostgreSql() entwickelt.

Einer der Vorteile dieses Anbieters ist, dass es vollständige Visual Studio-Unterstützung bietet. Die neuesten Versionen enthalten alle neuen Framework-Funktionen wie linq.

+0

Ich habe auch den devart ado.net Datenprovider für PostgreSql benutzt. Es war ein gutes Produkt, obwohl Sie die in VS 2010 integrierten Entity Framework-Tools nicht verwenden konnten, um mit Ihrem Entitätsdatenmodell zu arbeiten. Keine große Sache aber. –

9

Npgsql - .Net-Anbieter für PostGreSQL - ist ein ausgezeichneter Treiber. Wenn Sie das traditionellere ADO.NET-Framework verwendet haben, haben Sie hier wirklich Glück. Ich habe einen Code, der eine Verbindung zu Oracle herstellt, der fast identisch mit den PostGreSQL-Verbindungen aussieht. Leichter aus Oracle zu wechseln und Gehirnzellen wiederzuverwenden.

Es unterstützt alle Standard-Dinge, die Sie mit dem Aufruf von SQL tun möchten, aber es unterstützt auch Aufruf Funktionen (gespeicherte Prozeduren). Dies beinhaltet die Rückgabe von Referenzcursor. Die Dokumentation ist gut geschrieben und bietet nützliche Beispiele, ohne dabei philosophisch oder geheimnisvoll zu werden. Stehlen Sie den Code direkt aus der Dokumentation und es wird sofort funktionieren.

Francisco Figueiredo, Jr. und Team haben einen tollen Job gemacht.
Es ist jetzt verfügbar auf Github.
https://github.com/franciscojunior/Npgsql2

Die bessere Website für Informationen ist: http://npgsql.projects.postgresql.org/

Lesen Sie die Dokumentation! http://npgsql.projects.postgresql.org/docs/manual/UserManual.html

1

Lassen Sie sich nicht von einem Mangel an Linq Unterstützung stoppen. Ein Muster, das ich verwende, besteht darin, meine Daten immer in Listen zurückzugeben und dann linq weg. Ich fing an, dies religiös zu tun, als ich feststellte, dass der gleiche (zugegebenermaßen obskure) Linq-Ausdruck in MySQL nicht die gleichen Daten zurückbrachte wie in Sql Server.

1

Gerade Werkzeug Go -> NuGet Package Manager ->-Manager Nuget Package Manager

Suche nach Npgsql und dann Ihr Projekt auswählen und auf

Installieren

Beispielcode

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(); 
      }    
     } 

Verwenden Sie in postgreSql keine Großbuchstaben, da Groß- und Kleinschreibung beachtet wird.

+0

stattdessen: Verbindung = d_connection; // Ihre Verbindungszeichenfolge sollte wie folgt lauten: connection.ConnectionString = d_connection; // Ihre Verbindungszeichenfolge – user3057544