时间:2021-05-20
本文实例讲述了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 UPDATEON [SEQUENCE]FOR EACH ROWbegin 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#程序设计有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了C#中增加SQLite事务操作支持与使用方法。分享给大家供大家参考,具体如下:在C#中使用Sqlite增加对transaction支持usingS
本文实例讲述了C#操作SQLite数据库方法。分享给大家供大家参考,具体如下:SQLite介绍SQLiteisasoftwarelibrarythatimple
本文实例讲述了C#SQLite事务操作方法。分享给大家供大家参考,具体如下:在C#中执行Sqlite数据库事务有两种方式:SQL代码和C#代码1.SQL代码:B
本文实例讲述了C#操作SQLite方法。分享给大家供大家参考。具体分析如下:地址:System.Data.Sqlite入手。。。首先import/using:复
本文实例讲述了C#实现Excel导入sqlite的方法,是非常实用的技巧。分享给大家供大家参考。具体方法如下:首先需要引用system.date.sqlite具