gpt4 book ai didi

c# - Firebird EXECUTE BLOCK 从 c# 和 Flamerobin 中抛出错误 104

转载 作者:太空宇宙 更新时间:2023-11-03 15:11:39 25 4
gpt4 key购买 nike

我有几个查询要使用 EXECUTE BLOCK AS BEGIN ... END 语句执行。

所以我继续尝试我的第一个条目 - 脚本看起来很简单:

UPDATE OR INSERT INTO MY_TABLE (ID, VALUE) VALUES ('1', 'First Entry');

所以我运行它并且一切正常。接下来我将它放入一个执行 block 中:

EXECUTE BLOCK AS
BEGIN
UPDATE OR INSERT INTO MY_TABLE (ID, VALUE) VALUES ('1', 'First Entry');
END

现在,我在第 3 行 处收到错误 104 isc_dsql_prepare failed 错误; 字符:命令行意外结束 - 第 4 行,第 70 列。当我在 FlameRobin 中运行时,我遇到了同样的错误,但是当我在 DBWorkbench 中执行完全相同的代码时一切正常...

谁能解释一下可能是什么问题?

更新下面是我如何通过 C# 执行 block :

 string sql = "EXECUTE BLOCK AS BEGIN .... END";
DbLive.Open();
FbCommand command = new FbCommand(sql, DbLive);
command.ExecuteNonQuery();

最佳答案

我需要 2 个步骤来解决问题:

1) 在 C# 代码中使用 ExecuteScalar:

string sql = "EXECUTE BLOCK AS BEGIN .... END";
DbLive.Open();
FbCommand command = new FbCommand(sql, DbLive);
command.ExecuteScalar();

2) 根本不使用SET TERM,而是确保 block 的大小不会太大。对 sql 字符串大小进行简单测试就足够了(归功于 Elias 感谢 this post 中的评论)。

更新升级到最新的 Firebird 提供程序后(截至撰写本文时,它是 v.5.7.0.0),ExecuteScalarExecuteNonQuery 都可以工作。

另请注意,由于有很多触发器,我对大小测试进行了智能化以包括所述的 sql 长度,但还添加了一个查询计数器,以限制两者的长度 block 和查询次数。

关于c# - Firebird EXECUTE BLOCK 从 c# 和 Flamerobin 中抛出错误 104,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40976843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com