C# SQLite序列操作实现方法详解
程序员文章站
2023-12-14 09:59:40
本文实例讲述了c# sqlite序列操作实现方法。分享给大家供大家参考,具体如下:
sqlite 不能直接创建自定义函数,不能像 sql server中那样方便创建并使用...
本文实例讲述了c# sqlite序列操作实现方法。分享给大家供大家参考,具体如下:
sqlite 不能直接创建自定义函数,不能像 sql server中那样方便创建并使用。不过我们照样可以创建它,创建成功后,我们照样可以随心所欲(比如批量更新等)
序列是一个数据库中很常用的操作,在其它关系型数据库创建是相当简单的,但sqlite不是很方便,因为它不能直接创建自定义函数
1.先创建一个表示序列的表:
create table sequence ( seq_name varchar(50) not null, min_val decimal(12,0) not null, current_val decimal(12,0) not null, max_val decimal(12,0) not null default 1, increment int not null default 1, primary key (seq_name) );
定义序列的最小值、最大值、步长、序列的名称以及当前值
2.创建触发器
create trigger [seq_reset_trg] after update on [sequence] for each row begin update sequence set current_val=min_val where current_val-increment>=max_val; end;
当当前值大于最大值时,重置为最小值,达到序号循环使用的目的。
在c#中使用代码创建函数,sqlitehelper 是访问sqlite的公共类库,在前面的文章《c#操作sqlite数据库帮助类详解》中有介绍。
3.获取当前序列值
[sqlitefunction(name = "getcurrentvalue", arguments = 1, functype = functiontype.scalar)] public class getcurrentvalue : sqlitefunction { public override object invoke(object[] args) { dictionary<string, string> data = new dictionary<string, string>(); data.add("v_seq_name", args[0].tostring()); string sql = "select current_val from sequence where seq_name = @v_seq_name; "; return sqlitehelper.executescalar(sql,data); } }
4.获取下一个序列值
[sqlitefunction(name = "getnextvalue", arguments = 1, functype = functiontype.scalar)] public class getnextvalue : sqlitefunction { public override object invoke(object[] args) { dictionary<string, string> data = new dictionary<string, string>(); data.add("v_seq_name", args[0].tostring()); string sql = "update sequence set current_val = current_val + increment where seq_name = @v_seq_name; "; sqlitehelper.executenonquery(sql, data); return sqlitehelper.executescalar(string.format("select getcurrentvalue('{0}')",args[0].tostring()),null); } }
5.设置当前序列值
[sqlitefunction(name = "setvalue", arguments = 2, functype = functiontype.scalar)] public class setvalue : sqlitefunction { public override object invoke(object[] args) { dictionary<string, string> data = new dictionary<string, string>(); data.add("v_seq_name", args[0].tostring()); data.add("v_value", args[1].tostring()); string sql = "update sequence set current_val = @v_value where seq_name= @v_seq_name; "; sqlitehelper.executescalar(sql, data); return sqlitehelper.executescalar(string.format("select getcurrentvalue('{0}')", args[0].tostring()), null); } }
6.测试:
在序列表sequence中添加一行数据
定义序列名称为purchase_in_order,最小值为2000,当前值为2000,最大值值为9999,步长为1.
执行语句:
string sql = string.format("select getnextvalue('purchase_in_order')"); sqlitehelper.executenonquery(sql,null);
去数据库中查看当前值是否增加
更多关于c#相关内容感兴趣的读者可查看本站专题:《c#常见数据库操作技巧汇总》、《c#常见控件用法教程》、《c#窗体操作技巧汇总》、《c#数据结构与算法教程》、《c#面向对象程序设计入门教程》及《c#程序设计之线程使用技巧总结》
希望本文所述对大家c#程序设计有所帮助。