国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C# Sqlite 序列

2019-11-17 03:08:45
字體:
來源:轉載
供稿:網友

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)  );
View Code

定義序列的最小值、最大值、步長、序列的名稱以及當前值

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;
View Code

當當前值大于最大值時,重置為最小值,達到序號循環使用的目的。

在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);        }    }
View Code

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);        }    }
View Code

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);        }    }
View Code

6.測試:

在序列表SEQUENCE中添加一行數據

定義序列名稱為PURCHASE_IN_ORDER,最小值為2000,當前值為2000,最大值值為9999,步長為1.

執行語句:

stringsql=string.Format("SelectGetNextValue('PURCHASE_IN_ORDER')");SqliteHelper.ExecuteNonQuery(sql,null);去數據庫中查看當前值是否增加


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 玉溪市| 德昌县| 巴中市| 涟水县| 贡嘎县| 江西省| 明光市| 襄樊市| 调兵山市| 长子县| 化隆| 合江县| 故城县| 嵊州市| 云安县| 永平县| 和政县| 阿坝| 藁城市| 镇宁| 灵璧县| 土默特右旗| 余干县| 柳河县| 合作市| 桂阳县| 龙岩市| 郯城县| 河西区| 井冈山市| 尼勒克县| 颍上县| 福州市| 台中市| 麻江县| 邵武市| 昌宁县| 元氏县| 白山市| 明溪县| 广德县|