【问题标题】:Invalid request BLR at offset 1049 - function ROUNDDEC is not defined偏移量 1049 处的无效请求 BLR - 未定义函数 ROUNDDEC
【发布时间】:2017-01-03 08:59:57
【问题描述】:

首先让我们提一下,我正在开发一些程序,该程序已经在使用我们尚未构建的其他程序中的数据库。

所以我尝试使用存储过程,该过程如下所示:

↑OK
↓VRDOK
↓BRDOK
↓ROBAID
↓CENA_BEZ_PDV
↓KOL
↓RABAT

这是我的命令:

using (var command = new FbCommand("NAPRAVISTAVKU", con)
       {
           CommandType = CommandType.StoredProcedure
       })
{
    command.Parameters.AddWithValue("@VRDOK", 33);
    command.Parameters.AddWithValue("@BRDOK", 711066);
    command.Parameters.AddWithValue("@ROBAID", 1040);
    command.Parameters.AddWithValue("@CENA_BEZ_PDV", 0.0);
    command.Parameters.AddWithValue("@KOL", 10.0);
    command.Parameters.AddWithValue("@RABAT", 0.0);
    FbDataReader dr = command.ExecuteReader();
    while (dr.Read())
    {
        MessageBox.Show(dr[0].ToString());
    }
}

所以我的问题是为什么我会收到funcion rounddec is not defined 的这个错误。该函数应该在数据库中还是在我的程序或其他外部文件中?有没有办法在我的程序中创建新函数并将其称为 ROUNDDEC,因为我知道它需要做什么?

错误图片link

【问题讨论】:

  • 没有调用 ROUNDDEC - 这是 SQL 错误吗?
  • 我在帖子中添加了错误图片。它发生在command.ExecuteReader();
  • 请贴出存储过程的代码。错误本身表明您正在引用数据库中不存在的 UDF,或者服务器上无法访问包含 UDF 的库(不存在,错误位数)。 Firebird 本身没有函数rounddec
  • 至于如何在 Visual Studio 中找到它,不知道。我建议你使用 Flame robin 查看你的数据库,或者使用 select select RDB$PROCEDURE_NAME, RDB$PROCEDURE_SOURCE from RDB$PROCEDURES where RDB$PROCEDURE_NAME = 'NAPRAVISTAVKU' 来获取存储过程的主体。

标签: c# sql database stored-procedures firebird


【解决方案1】:

ROUNDDEC 是 FreeUDBLib.dll 的一部分,它与 32 位 firebird 一起工作。问题是我在我的 PC 上安装了 Firebird 3.0 x64、Firebird 2.1 x64 和 Firebird 2.1 x86。我的程序是为 Firebird 2.1 x86 工作而构建的,但由于某种原因,即使我在 x86 版本的 ULF 文件中有这个 DLL,它也没有从中提取它,而是在 x64 位版本中检查 UDF。所以解决方案是卸载所有版本并重新安装 2.1 x86,然后重新安装 ddex 和 firebird.sql 并且它工作。

我认为有更好的方法可以为 UDF 手动设置文件夹,但目前我不知道,所以这是可以接受的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 2011-10-05
    • 2011-03-13
    相关资源
    最近更新 更多