如何从 Firebird 数据库中获取错误代码
How can get the error code from an Firebird Database
我们正在为我们的 MVC5 项目使用嵌入式 Firebird V3.0.2
问题:当我们更新软件时,我们想在创建新的table之前先确定一个table是否存在。因此,我们只需在所需的 table 上创建一个 select,如果发生 sql 错误代码 -204
的异常,则 table 不存在。但是如何解决错误代码-204
?
代码:
var lFbCommand = new FbCommand();
lFbCommand.Connection = "MyConnectionstring";
lFbCommand.Connection.Open();
// check if table exists by an select query
lFbCommand.CommandText = string.Format("SELECT FIRST 1 * FROM {0}", "MyTableName");
try
{
pFbCommand.ExecuteNonQuery();
}
catch (FirebirdSql.Data.FirebirdClient.FbException e)
{
if(e.? == -204) // -204 seem to be the errorcode for "Table does not exists."
{
// table does not exist.
}
else
{
throw;
}
}
注意:我们要防止在异常中解析消息文本。我们想为这个错误得到一个明确的标志(例如通过任何 属性 的错误代码)。
你不应该看(所谓的)SQLcode。 SQLcodes 非常不具体,例如 SQLcode -204 涵盖了广泛的错误(如果不是数百个子错误,也可能是几十个)。不只是"table unknown",还有"trigger unknown"、"Datatype unknown"等
您需要查看错误代码 (FbException.ErrorCode
)(这与 SQLcode 不同),尽管这仍然很棘手,因为有时错误代码是从不特定的(涵盖与关联的 SQLcode 相似的范围)更具体。 "table unknown"(isc_dsql_relation_err
或 335544580)就是这种情况,它嵌套在组 isc_dsql_error
(335544569)中。 isc_dsql_error
- IIRC - 几乎一对一地映射到 SQLcode -204(可能是几十到几百个错误)。
据我所知——但我通常不使用 C# 编程——你需要查看 FbException.Errors
(其中 returns 和 FbErrorCollection
)并检查它是否包含正确的错误。
我们正在为我们的 MVC5 项目使用嵌入式 Firebird V3.0.2
问题:当我们更新软件时,我们想在创建新的table之前先确定一个table是否存在。因此,我们只需在所需的 table 上创建一个 select,如果发生 sql 错误代码 -204
的异常,则 table 不存在。但是如何解决错误代码-204
?
代码:
var lFbCommand = new FbCommand();
lFbCommand.Connection = "MyConnectionstring";
lFbCommand.Connection.Open();
// check if table exists by an select query
lFbCommand.CommandText = string.Format("SELECT FIRST 1 * FROM {0}", "MyTableName");
try
{
pFbCommand.ExecuteNonQuery();
}
catch (FirebirdSql.Data.FirebirdClient.FbException e)
{
if(e.? == -204) // -204 seem to be the errorcode for "Table does not exists."
{
// table does not exist.
}
else
{
throw;
}
}
注意:我们要防止在异常中解析消息文本。我们想为这个错误得到一个明确的标志(例如通过任何 属性 的错误代码)。
你不应该看(所谓的)SQLcode。 SQLcodes 非常不具体,例如 SQLcode -204 涵盖了广泛的错误(如果不是数百个子错误,也可能是几十个)。不只是"table unknown",还有"trigger unknown"、"Datatype unknown"等
您需要查看错误代码 (FbException.ErrorCode
)(这与 SQLcode 不同),尽管这仍然很棘手,因为有时错误代码是从不特定的(涵盖与关联的 SQLcode 相似的范围)更具体。 "table unknown"(isc_dsql_relation_err
或 335544580)就是这种情况,它嵌套在组 isc_dsql_error
(335544569)中。 isc_dsql_error
- IIRC - 几乎一对一地映射到 SQLcode -204(可能是几十到几百个错误)。
据我所知——但我通常不使用 C# 编程——你需要查看 FbException.Errors
(其中 returns 和 FbErrorCollection
)并检查它是否包含正确的错误。