1

我们在 MVC5 项目中使用嵌入式 Firebird V3.0.2

问题:当我们更新软件时,我们想在创建新表之前找出表是否存在。因此,我们只需在所需的表上进行选择,如果出现带有 sql 错误代码的异常-204,则该表不存在。但是如何解决错误代码-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;
    }
}

注意:我们要防止解析异常中的消息文本。我们想为这个错误获得一个明确的标志(例如,通过任何属性的错误代码)。

4

1 回答 1

2

您不应该查看(所谓的)SQLcode。SQLcode 非常不具体,例如 SQLcode -204 涵盖了广泛的错误(如果不是数百个子错误,可能是几十个)。不仅仅是“table unknown”,还有“trigger unknown”、“Datatype unknown”等。

您需要查看错误代码FbException.ErrorCode( . isc_dsql_relation_err这就是嵌套在组isc_dsql_error(335544569)中的“表未知”(或 335544580)的情况。-IIRC isc_dsql_error- 几乎一对一地映射到 SQLcode -204(可能是几十到几百个错误)。

据我所知 - 但我通常不使用 C# 编程 - 你需要查看FbException.Errors(返回 a FbErrorCollection)并检查它是否包含正确的错误。

于 2017-08-23T11:03:14.003 回答