前置阅读文章
《EFCore使用ADO.NET连接GBase8s数据库示例》
《C#连接GBase8s数据库在windows环境下使用步骤》
创建解决方案Demo工程,并引入相应的EFCore包

我们首先创建名字为t7的数据库,并创建使用到的数据表和触发器。
创建两张数据表t1和t2,t1是业务数据表,t2是通过触发器实现的日志数据表。
CREATE TABLE t7:t1 (
name VARCHAR(100),
id VARCHAR(100),
age VARCHAR(100)
)
in rootdbs ;
CREATE TABLE t7:t2 (
id VARCHAR(100),
todo VARCHAR(100)
)
in rootdbs ;

创建了3个触发器,分别是查询操作触发器,插入操作触发器,修改操作触发器

触发器的示例代码如下:
查询操作触发器
当t1表被查询的时候,插入一条记录到t2日志表,
create trigger select_t1
select on t1
referencing old as old
for each row
(
insert into t2(id,todo)
values (old.id,'select')
);
插入操作触发器
当t1表中插入数据的时候,新生成记录的ID值,插入到t2日志表,
create trigger insert_t1
insert on t1
referencing new as new
for each row
(
insert into t2(id,todo)
values (new.id,'insert')
);
修改操作触发器
当t1表中记录修改的时候,被修改记录的原始ID值,插入到t2日志表,
create trigger update_t1
update of name on t1
referencing old as old
for each row
(
insert into t2(id,todo)
values (old.id,'update')
);

下面展示,通过EFCore调用执行SQL语句。
1 insert语句
GbsConnection conn = new GbsConnection(builder.ConnectionString);
conn.Open();
GbsCommand cmd = (GbsCommand)conn.CreateCommand();
try
{
cmd.CommandText = "insert into t1(name,id,age) values ('AAA','BBB','CCC')";
cmd.ExecuteNonQuery();
}
catch
{
throw;
}
执行期待的结果,t1表中,插入一条记录,并且触发插入操作触发器,插入一条记录在t2日志表。



2 update语句
GbsConnection conn = new GbsConnection(builder.ConnectionString);
conn.Open();
GbsCommand cmd = (GbsCommand)conn.CreateCommand();
try
{
cmd.CommandText = "update t1 set name = 'DDD' where id ='BBB'";
cmd.ExecuteNonQuery();
}
catch
{
throw;
}
执行期待的结果,t1表中,修改一条记录,并且触发修改操作触发器,插入一条记录在t2日志表。

3 select语句
GbsConnection conn = new GbsConnection(builder.ConnectionString);
conn.Open();
GbsCommand cmd = (GbsCommand)conn.CreateCommand();
try
{
cmd.CommandText = "select * from t1";
cmd.ExecuteNonQuery();
GbsDataReader dr = (GbsDataReader)cmd.ExecuteReader();
while (dr.Read())
{
for (int i = 0; i < dr.FieldCount; i++)
{
Console.WriteLine(dr[i]);
}
}
}
catch
{
throw;
}
执行期待的结果,t1表中,没有变化,触发查询操作触发器,插入一条记录在t2日志表。






