c# - 事务中的 Firebird DDL + DML 语句

标签 c# transactions firebird

有什么方法可以在 Firebird 中的事务中执行以下操作吗?

 CREATE TABLE a (INTEGER c1);
 INSERT INTO a (c1) VALUES (1);
 DROP TABLE a

如果没有,为什么不呢?

有什么解决办法吗?尝试了保存点、ADO.NET 事务,似乎没有任何效果。

更新 Firebird 事务不能很好地混合 DDL 和 DML 语句。您可以创建表,但它们在事务中不可见。需要两个单独的事务(或根本不需要事务)。另外,不要担心匿名事务或执行 block ,因为它们似乎无法通过网络工作。

最佳答案

Firebird 不支持在创建的同一事务中使用表。另外,我不明白你在这里所做的事情(创建、填充和删除表格)的意义。也许您正在寻找 Global Temporary Table Firebird 的功能:您定义表一次(例如使用ON COMMIT DELETE ROWS),然后您可以重用其定义,而不必每次都重新创建表。

当您评论说您想要使用此表来存储“变量”时,您还可以研究 RDB$SET_CONTEXT() 的使用和 RDB$GET_CONTEXT() (Firebird 2.0 及更高版本),它允许您在连接或事务上下文中存储值。

例如,这会将变量 VariableName 设置为 (VARCHAR) 值“513”

select rdb$set_context('USER_SESSION', 'VariableName', 513) from rdb$database

然后您可以使用以下方式检索它:

select rdb$set_context('USER_SESSION', 'VariableName') from rdb$database

如果您需要将其作为INTEGER,则需要添加显式强制转换。

关于c# - 事务中的 Firebird DDL + DML 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17022126/

相关文章:

sql-server - 使用事务日志回滚事务

java - 交易异常 : Transaction not successfully started

c++ - Firebird 数据库文件拷贝打不开

C# 内存模型、锁定和同步

c# - Windows 服务应如何从自定义命令返回信息

c# - 添加到数组

c# - HttpModule 中的异步事件处理程序

unit-testing - 带有 SQLite 内存数据库和 NHibernate 的 TransactionScope

c# - 使用 firebird 和 c# 创建身份字段时创建生成器错误错误

firebird - 将 firebird 客户端连接到服务器