Ao usar um banco de dados Firebird 3 (servidor), mas conectando através de uma biblioteca .NET, FirebirdSql.Data.FirebirdClient (eu tentei a V. 7.10.1 e a mais recente 10.3.2), recebo o seguinte erro (neste exemplo, algo está errado na minha declaração drop-constraint):
FirebirdSql.Data.FirebirdClient.FbException: atualização de metadados malsucedida
ALTER TABLE mytable falhou
Nenhuma mensagem para o código de erro 336068738 encontrada.
Tentei copiar o firebird.msg
arquivo para pastas system32
e wow64
pastas. Também tentei usar a variável de ambiente, FIREBIRD_MSG=C:\Program Files\Firebird\Firebird_3_0\firebird.msg
conforme indicado aqui.
Parece que não está funcionando para nenhum erro que eu possa gerar por meio de instruções SQL erradas.
Outro número de erro que recebi, por exemplo, é 336068731.
O código é assim:
if (DbProviderFactories.GetFactory("FirebirdSql.Data.FirebirdClient") is not FirebirdClientFactory fac)
{
throw new InvalidOperationException("FirebirdSql.Data.FirebirdClient.dll could not be loaded.");
}
var host = "localhost";
var user = "SYSDBA";
var pass = "masterkey";
var db = $"c:/databases/DelphiIn2025QuestionmarkQuestionmark.fdb";
var bld = new FbConnectionStringBuilder
{
Charset = "NONE",
DataSource = host,
Database = db,
UserID = user,
Password = pass,
WireCrypt = FbWireCrypt.Enabled
};
using (var con = fac.CreateConnection() as FbConnection)
{
if (con == null)
{
throw new InvalidOperationException("No FbConnection returned...");
}
con.ConnectionString = bld.ConnectionString;
con.Open();
using (var cmd = fac.CreateCommand() as FbCommand)
{
if (cmd == null) { throw new InvalidOperationException("No FbCommand returned..."); }
cmd.Connection = con;
cmd.CommandText = "alter table mytable drop constraint PK_uid";
cmd.ExecuteNonQuery();
}
}
A biblioteca FirebirdSql.Data.FirebirdClient não usa
firebird.msg
para obter as mensagens de erro (nem usafbclient.dll
, a menos que você use o tipo de servidor Embedded na string de conexão), mas tem sua própria cópia emIscErrorMessages.cs
, e a versão atual não tem os códigos de erro que você mencionou.Como o usuário13964273 mencionou nos comentários, os códigos de erro são as seguintes mensagens:
336068738
— CONSTRAINT @1 não existe.336068731
— Coluna: @1 não definido como NOT NULL - não pode ser usado na definição de restrição PRIMARY KEYO curioso é que ambas são mensagens de erro bem antigas, então eu esperaria que já estivessem presentes. Portanto, não sei por que ainda não foram incluídas, então provavelmente uma filtragem incorreta de mensagens de erro foi realizada ao preencher essa classe (ou uma fonte incompleta foi usada).
Criei o problema #1221 para corrigir isso.