暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

通过EFCore执行SQL语句调用触发器操作

wj2021 2021-12-23
1015

前置阅读文章

《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日志表。


 

 

 

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论