久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

C# SQLite序列操作實現方法詳解

這篇文章主要介紹了C# SQLite序列操作實現方法,結合實例形式詳細分析了C#實現SQLite序列操作的具體步驟與相關操作技巧,需要的朋友可以參考下

本文實例講述了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#程序設計有所幫助。

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

這篇文章主要介紹了C# 將Access中以時間段條件查詢的數據添加到ListView中,需要的朋友可以參考下
這篇文章主要介紹了使用C#創建Windows服務的實例代碼,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
這篇文章主要介紹了C#身份證識別相關技術詳解,具有一定的參考價值,感興趣的小伙伴們可以參考一下
這篇文章主要為大家詳細介紹了C#中TCP粘包問題的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
這篇文章主要介紹了C#實現的海盜分金算法,結合具體實例形式分析了海盜分金算法的原理與C#相應實現技巧,需要的朋友可以參考下
這篇文章主要為大家詳細介紹了C#操作INI配置文件示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
主站蜘蛛池模板: 99久久免费精品视频 | 欧美日韩高清在线一区 | 成人免费在线小视频 | 亚洲视频国产 | 久久大陆 | 欧美aaaa视频 | 欧美一区二区视频 | 成人在线中文字幕 | 日本精品国产 | 亚洲欧美国产精品久久 | 中文字幕福利视频 | 日韩在线精品视频 | 在线播放91| 亚洲一区影院 | 国产一区二区在线免费观看 | 美日韩免费视频 | 免费小视频在线观看 | 国产成人精品一区二区三区四区 | 国产精品美女久久久久aⅴ国产馆 | 久久国内 | 国产一级黄色网 | 99在线资源| 日韩欧美中文字幕在线观看 | 精品一区二区三区四区五区 | 水蜜桃久久夜色精品一区 | 97成人免费| 亚洲天堂一区二区 | 天堂av中文在线 | 精品视频在线播放 | 在线亚洲一区 | 免费观看日韩av | 成人av一区 | 久久国产精品一区二区三区 | 国产欧美在线一区 | 免费v片 | 一区二区三区久久久 | 亚洲精品一区二区三区中文字幕 | 国产成人福利视频在线观看 | 国产一级在线 | 观看毛片 | 色偷偷888欧美精品久久久 |