4

私はfirebird embedded v 2.5と.net FirebirdSql.Data.FirebirdClientを使用しています。特定のデータベースのODSバージョンを取得できる必要があります。

私が試してみました:

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.
    {
     ...
    }
  }
}

{"動的 SQL エラー\r\nSQL エラー コード = -804\r\nFunction unknown\r\nRDB$GET_CONTEXT"}

4

2 に答える 2

1

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

于 2016-10-27T15:01:09.120 に答える