查看: 2280|回复: 0

[ASP.NET教程] C# SQLite序列操作实现方法详解

发表于 2018-2-10 08:00:07

本文实例讲述了C# SQLite序列操作实现方法。分享给大家供大家参考,具体如下:

sqlite 不能直接创建自定义函数,不能像 sql server中那样方便创建并使用。不过我们照样可以创建它,创建成功后,我们照样可以随心所欲(比如批量更新等)

序列是一个数据库中很常用的操作,在其它关系型数据库创建是相当简单的,但Sqlite不是很方便,因为它不能直接创建自定义函数

1.先创建一个表示序列的表:

  1. CREATE TABLE SEQUENCE (
  2. SEQ_NAME VARCHAR(50) NOT NULL,
  3. MIN_VAL DECIMAL(12,0) NOT NULL,
  4. CURRENT_VAL DECIMAL(12,0) NOT NULL,
  5. MAX_VAL DECIMAL(12,0) NOT NULL DEFAULT 1,
  6. INCREMENT INT NOT NULL DEFAULT 1,
  7. PRIMARY KEY (SEQ_NAME)
  8. );
复制代码

定义序列的最小值、最大值、步长、序列的名称以及当前值

2.创建触发器

  1. CREATE TRIGGER [SEQ_RESET_TRG]
  2. AFTER UPDATE
  3. ON [SEQUENCE]
  4. FOR EACH ROW
  5. begin
  6. UPDATE SEQUENCE SET CURRENT_VAL=MIN_VAL WHERE CURRENT_VAL-INCREMENT>=MAX_VAL;
  7. end;
复制代码

当当前值大于最大值时,重置为最小值,达到序号循环使用的目的。

在C#中使用代码创建函数,SqliteHelper 是访问Sqlite的公共类库,在前面的文章《C#操作SQLite数据库帮助类详解》中有介绍。

3.获取当前序列值

  1. [SQLiteFunction(Name = "GetCurrentValue", Arguments = 1, FuncType = FunctionType.Scalar)]
  2. public class GetCurrentValue : SQLiteFunction
  3. {
  4. public override object Invoke(object[] args)
  5. {
  6. Dictionary<String, String> data = new Dictionary<string, string>();
  7. data.Add("V_SEQ_NAME", args[0].ToString());
  8. string sql = "SELECT CURRENT_VAL FROM SEQUENCE WHERE SEQ_NAME = @V_SEQ_NAME; ";
  9. return SqliteHelper.ExecuteScalar(sql,data);
  10. }
  11. }
复制代码

4.获取下一个序列值

  1. [SQLiteFunction(Name = "GetNextValue", Arguments = 1, FuncType = FunctionType.Scalar)]
  2. public class GetNextValue : SQLiteFunction
  3. {
  4. public override object Invoke(object[] args)
  5. {
  6. Dictionary<String, String> data = new Dictionary<string, string>();
  7. data.Add("V_SEQ_NAME", args[0].ToString());
  8. string sql = "UPDATE SEQUENCE SET CURRENT_VAL = CURRENT_VAL + INCREMENT WHERE SEQ_NAME = @V_SEQ_NAME; ";
  9. SqliteHelper.ExecuteNonQuery(sql, data);
  10. return SqliteHelper.ExecuteScalar(string.Format("SELECT GetCurrentValue('{0}')",args[0].ToString()),null);
  11. }
  12. }
复制代码

5.设置当前序列值

  1. [SQLiteFunction(Name = "SetValue", Arguments = 2, FuncType = FunctionType.Scalar)]
  2. public class SetValue : SQLiteFunction
  3. {
  4. public override object Invoke(object[] args)
  5. {
  6. Dictionary<String, String> data = new Dictionary<string, string>();
  7. data.Add("V_SEQ_NAME", args[0].ToString());
  8. data.Add("V_VALUE", args[1].ToString());
  9. string sql = "UPDATE SEQUENCE SET CURRENT_VAL = @V_VALUE WHERE SEQ_NAME= @V_SEQ_NAME; ";
  10. SqliteHelper.ExecuteScalar(sql, data);
  11. return SqliteHelper.ExecuteScalar(string.Format("SELECT GetCurrentValue('{0}')", args[0].ToString()), null);
  12. }
  13. }
复制代码

6.测试:

在序列表SEQUENCE中添加一行数据

定义序列名称为PURCHASE_IN_ORDER,最小值为2000,当前值为2000,最大值值为9999,步长为1.

执行语句:

  1. string sql = string.Format("Select GetNextValue('PURCHASE_IN_ORDER')");
  2. SqliteHelper.ExecuteNonQuery(sql,null);
复制代码

去数据库中查看当前值是否增加

更多关于C#相关内容感兴趣的读者可查看本站专题:《C#常见数据库操作技巧汇总》、《C#常见控件用法教程》、《C#窗体操作技巧汇总》、《C#数据结构与算法教程》、《C#面向对象程序设计入门教程》及《C#程序设计之线程使用技巧总结》

希望本文所述对大家C#程序设计有所帮助。

您可能感兴趣的文章:

  • C#操作SQLite方法实例详解
  • C#/.Net 中快速批量给SQLite数据库插入测试数据
  • C#基于SQLiteHelper类似SqlHelper类实现存取Sqlite数据库的方法
  • C#简单访问SQLite数据库的方法(安装,连接,查询等)
  • C#简单查询SQLite数据库是否存在数据的方法
  • C#操作SQLite数据库方法小结(创建,连接,插入,查询,删除等)
  • C#操作SQLite数据库之读写数据库的方法
  • C#解决SQlite并发异常问题的方法(使用读写锁)
  • c#几种数据库的大数据批量插入(SqlServer、Oracle、SQLite和MySql)
  • C#操作SQLite数据库帮助类详解
  • C# SQLite事务操作方法分析
  • C#中增加SQLite事务操作支持与使用方法


回复

使用道具 举报