Manuel Kukla's Blog

IT, Finanzen, Aktien, Kuriositäten und alltägliches

H2 Database unter .NET via ODBC

Für mein letztes Projekt (einer Statistik-Seite für Burst-Einnahmen http://burstcoin.mku.name:8080/) benötigte ich eine Verbindung zur H2 Datenbank via ASP.NET.

Da ich nicht gleich fündig geworden bin, folgt hier eine kurze Anleitung zur Verwendung der H2 Datenbank unter .NET.

Der nach meinem Erkenntnisstand einfachste Weg besteht darin, einfach den ODBC-Treiber von PostgreSQL zu verwenden. Dieser kann auf der Website von PostgreSQL heruntergeladen werden (http://www.postgresql.org/ftp/odbc/versions/dll/). 

Die Verbindung unter C# sieht dann wie folgt aus:

String sConn = "Driver={PostgreSQL ANSI" + (System.Environment.Is64BitProcess ? "(x64)" : "") + "};"+
               "database=C:\\burst\\burst_1.2.0\\burst_db\\burst;" +   
               "server=localhost;port=5435;uid=sa;pwd=sa;";
using(OdbcConnection conn = new OdbcConnection(sConn))
{
   conn.Open();
   using(OdbcCommand cmd = new OdbcCommand("SELECT * FROM tTest", conn))
   {
     //..
   }
}

Zu beachten ist folgendes:

  • der abweichende Standardport: 5435. Dieser ist beim Start des h2-Servers als PG server ersichtlich.

  • Unterschiedlicher Provider bei x64 und x86 (Stolperstein bei angehängtem Debugger / Release-Version)


Die alternative Bibliothek H2Sharp habe ich nicht mehr zum Laufen gebracht. Ich scheiterte an der Fehlermeldung ... "driver version 6 ... client version 0...". Ich gehe davon aus, dass mein H2 Server zu neu ist, und die Bibliothek nicht mehr damit kompatibel ist. Die letzte Version von H2Sharp ist von 2008.

PostgreSQL x64 ODBC Treiber unter einem frischen Windows Server 2012R2 Standard und der Systemfehler 126

Kürzlich benötigte ich für die H2 Datenbank (http://www.h2database.com/html/main.html) einen ODBC-Treiber als Schnittstelle für .NET. Die Installation auf meiner Entwicklungsmaschine klappte problemlos, (fast) genauso wie die Verbindung zur Datenbank selbst. Dies werde ich aber noch in einem eigenen Post behandeln.

Nun aber zum Problem beim Produktivsystem. Dort konnte ich problemlos die letzte x86-Version des Treibers installieren, nicht jedoch die benötigte x64 Version.

Dort erhielt ich folgende Fehlermeldung beim Setup:

(Zusammenfassung für Suchmaschinen: PostgreSQL ANSI(x64) ODBC error 13: Die Setup-Routinen für den PostgreSQL ANSI(x64) ODBC-Treiber konnten nicht geladen werden. Systemfehlercode 126: Das angegebene Modul wurde nicht gefunden. ...psqlodbc30a.dll).. Verify that the file PostgreSQL ANSI(x64) exists and that you can access it.)


Die Lösung dieses Problems lag darin, dass vor dem Setup die VC++ 2010 Redistributable installiert werden musste. Auf dem Entwicklungssystem war diese natürlich bereits vorhanden, somit hatte ich dort auch kein Problem.

Ich installierte zur Sicherheit gleich beide Versionen (x86 und x64). Diese sind unter http://www.microsoft.com/en-us/download/details.aspx?id=5555 erhältlich. Danach klappte alles wie erwartet.