Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   C# Firebird Provider kann nicht verbinden? (https://www.delphipraxis.net/158545-firebird-provider-kann-nicht-verbinden.html)

Phoenix 21. Feb 2011 21:20

Datenbank: Firebird • Version: 2.5 • Zugriff über: Firebird .NET Provider 2.6

Firebird Provider kann nicht verbinden?
 
Hi,

ich habe eine Firebird-Datenbank (aktuelle Version), auf die ich einwandfrei mit IBExpert verbinden kann.

Nun will ich auf diese Datenbank mit dem Firebird ADO.NET Provider (auch aktuelle Version) verbinden.
Das hier ist der Code:
Code:
try
{
   FbConnection conn = new FbConnection(@"Server=127.0.0.1;User=SYSDBA;Password=masterkey;Database=C:\Users\smartBugs\Documents\PCTRADE.gdb");
   conn.Open();
}
catch (Exception ex)
{
   this.Text = ex.Message;
}
Wie gesagt, die Einstellungen funktionieren mit IBExpert einwandfrei. Der Firebird provider jedoch schmeisst bei conn.Open() eine IndexOutOfRangeException mit folgendem Stacktrace:

Code:
StackTrace " at System.Collections.ArrayList.get_Item(Int32 index)
at FirebirdSql.Data.Client.Managed.Version10.GdsDatabase.GetServerVersion()
at FirebirdSql.Data.Client.Managed.Version10.GdsDatabase.Attach(DatabaseParameterBuffer dpb, String dataSource, Int32 port, String database)
at FirebirdSql.Data.FirebirdClient.FbConnectionInternal.Connect()
at FirebirdSql.Data.FirebirdClient.FbConnectionPool.Create()
at FirebirdSql.Data.FirebirdClient.FbConnectionPool.CheckOut()
at FirebirdSql.Data.FirebirdClient.FbConnection.Open()
at DBConnectionTest.Form1.Form1_Load(Object sender, EventArgs e) in C:\\Users\\smartBugs\\Documents\\Visual Studio 2010\\Projects\\TheEntityLibrary\\DBConnectionTest\\Form1.cs:line 25"  string
Ich finde keine Lösung für das Problem. Es scheint einen Eintrag bei Firebird für das Problem zu geben, aber laut dessen Details ist genau dieses Problem in der Version die ich einsetze angeblich gefixt.

Jemand eine Idee?

BUG 21. Feb 2011 21:50

AW: Firebird Provider kann nicht verbinden?
 
Interessant finde ich den assoziierten Eintrag im Repository.
Wenn das wirklich das einzige ist, was gemacht wurde, dann wurde nur die Buffergröße verdoppelt.

Phoenix 21. Feb 2011 21:58

AW: Firebird Provider kann nicht verbinden?
 
Naja, es hilft ja auch nicht :|

Nersgatt 22. Feb 2011 10:10

AW: Firebird Provider kann nicht verbinden?
 
In Delphi.NET funktioniert es bei mir auf diese Art ganz wunderbar:

Delphi-Quellcode:
    fbCon.ConnectionString := GetFBConnectionString;
    fbCon.Open;
fbCon ist natürlich eine FBConnection.
Und der interessante Part:

Delphi-Quellcode:
function GetFBConnectionString : String;
// Erstellt den Connectionstring für die Verbindung zur Datenbank
var ini : TiniFile;
begin
  ini := TIniFile.Create(GetIniFilename);
  try
    Result := 'User=' + ini.ReadString(rsSectionDatenbank, rsSDBenutzer, rsSDBenutzerDefault) + ';' +
              'Password=' + ini.readString(rsSectionDatenbank, rsSDKennwort, rsSDKennwortDefault) + ';' +
              'Database=' + ini.ReadString(rsSectionDatenbank, rsSDDatenbank, rsSDDatenbankDefault) + ';' +
              'DataSource=' + ini.readString(rsSectionDatenbank, rsSDServer, rsSDServerDefault) + ';' +
              'Port=3050;' +
              'Dialect=3;' +
              'Charset=UTF8;' +
              'Role=;' +
              'Connection lifetime=0;' +
              'Connection timeout=15;' +
              'Pooling=True;' +
              'Packet Size=8192;' +
              'Server Type=0';
  finally
    ini.Free;
  end;

end;

dataspider 22. Feb 2011 10:34

AW: Firebird Provider kann nicht verbinden?
 
Hi,

die Syntax des Verbindungs - Strings war für mich zu anstrengend.
Deshalb nehme ich lieber den StringBuilder:
Code:
FbConnectionStringBuilder fbStringBuilder = new FbConnectionStringBuilder();
fbStringBuilder.DataSource = "127.0.0.1";
fbStringBuilder.Database = "AIS";
fbStringBuilder.ClientLibrary = @"C:\Program Files (x86)\Firebird\Firebird_2_1\bin\fbclient.dll";
fbStringBuilder.UserID = "SYSDBA";
fbStringBuilder.Password = "masterkey";
fbStringBuilder.Port = 3051;
fbStringBuilder.Dialect = 3;
fbStringBuilder.Charset = "ISO8859_1";

string CnnStr = fbStringBuilder.ToString();

FbConnection con = new FbConnection(CnnStr);
Der Debugger zeigt mir dann den folgenden String:

"data source=127.0.0.1;initial catalog=AIS;client library=\"C:\\Program Files (x86)\\Firebird\\Firebird_2_1\\bin\\fbclient.dll\" ;user id=SYSDBA;password=masterkey;port number=3051;dialect=3;character set=ISO8859_1"

Vielleicht ist es ja nur so, dass er Sever, User und Database so nicht schluckt.

Frank

Nersgatt 22. Feb 2011 10:55

AW: Firebird Provider kann nicht verbinden?
 
Ich denke, der Fehler wird da liegen, dass er "Server=..." geschrieben hat, statt "DataSource=..."

Phoenix 22. Feb 2011 10:58

AW: Firebird Provider kann nicht verbinden?
 
Auch mit den Änderungen und den zusätzlichen Angaben im Connectionstring (Server vs. Data source, Port, ClientLib etc. angeben oder auch nicht, in ziemlich vielen Kombinationen): Keine Änderung. Nach dem Attachen mit dem Server beim GetServerVersion bekomme ich die IndexOutOfRangeException.

Nersgatt 22. Feb 2011 11:34

AW: Firebird Provider kann nicht verbinden?
 
Das legt den Verdacht nahe, dass der Fehler an einer anderen Stelle zu suchen ist.
Passt die ClientLib mit der tatsächlichen Serverversion zusammen?

RWarnecke 22. Feb 2011 11:41

AW: Firebird Provider kann nicht verbinden?
 
Hallo Sebastian,

unter der Version 2.5.2 hat auf jedenfall der Sourcecode aus diesem Beitrag geholfen. Vielleicht hilft er Dir ja auch weiter.

Gruß
Rolf

Phoenix 22. Feb 2011 12:14

AW: Firebird Provider kann nicht verbinden?
 
Mannomann...

Reboot tut gut. Zweimal. Dann gings. :roll: Fragt mich bitte nicht, was die tatsächliche Ursache war, ich hab nämlich keine Ahnung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz