2016-10-20 7 views
2

私はFirebirdにv 2.5を埋め込み、.net FirebirdSql.Data.FirebirdClientを使用しています。 特定のデータベースに対してODSのバージョンを取得できる必要があります。.NetでFirebird ODSのバージョンを取得します。

私が試してみました:{ "動的SQLエラー\ rを\ nSQLエラーコード= -804 \ rを\ nFunction不明\ rを\ NRDB $ GET_CONTEXT"}

+0

データベースが助けをODS 11.2以上 –

答えて

1

private string GetOds(FbConnection connection) 
{ 
    using (var cmd = new FbCommand()) 
    { 
    var sqlQuery = "select rdb$get_context('SYSTEM','ENGINE_VERSION') as version from RDB$DATABASE"; 
    cmd.CommandText = sqlQuery; 
    cmd.Connection = connection; 
    cmd.CommandType = CommandType.Text; 

    using (var reader = cmd.ExecuteReader()) // HERE ITS WHERE THE EXCEPTION IS GENERATED. 
    { 
    ... 
    } 
    } 
} 

これはexecptionを生成し、

あなたはクラスFirebirdSql.Data.FirebirdClient.FbDatabaseInfoを使用してODSのバージョンを取得することができ、それはFbConnectionをラップし、例えば、データベースに関する情報を取得するために使用することができます。

using (var connection = new FbConnection(@"User=sysdba;Password=masterkey;Database=C:\path\to\your\database.fdb;DataSource=localhost")) 
{ 
    connection.Open(); 
    var dbInfo = new FbDatabaseInfo(connection); 

    Console.WriteLine("ODS Major: " + dbInfo.OdsVersion); 
    Console.WriteLine("ODS Minor: " + dbInfo.OdsMinorVersion); 
    Console.ReadLine(); 
} 

この必要がありますFirebirdでサポートされているすべてのODSバージョンで動作します(RDB$GET_CONTEXTとは異なり、ODS 11.2以降でのみサポートされています)。

+0

おかげであれば、 'RDB $ GET_CONTEXT'にのみ使用可能です...! –

0

バイナリからODSのバージョンを取得できます。

private const ushort FirebirdFlag = 0x8000; 

private void DispObsVersinoFromBinary(string path) 
{ 
    using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read)) 
    { 
     int fileSize = (int)fs.Length; 
     byte[] buf = new byte[1024]; 
     fs.Read(buf, 0, 1024); 
     var obsHex = string.Join("", buf.Skip(0x12).Take(2).Select(x => x.ToString("X2")).Reverse()); 
     var minor = string.Join("", buf.Skip(0x40).Take(2).Select(x => x.ToString("X2")).Reverse()); 
     Console.WriteLine($"ODSVer:{Convert.ToInt32(obsHex, 16) & ~FirebirdFlag}"); 
     Console.WriteLine($"ODSMinorVer:{Convert.ToInt32(minor, 16)}"); 
    } 
} 

及びその他のパタ​​ーン
https://github.com/kowill/Sample/blob/master/fb3test/Fb3Test/Program.cs#L71-L82

関連する問題