久久久久久久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配置文件示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
主站蜘蛛池模板: 午夜tv免费观看 | 久久不卡| 一级黄色片网站 | 久久99精品久久久久久国产越南 | 免费在线观看黄网站 | 国产精品成人一区二区三区夜夜夜 | 欧美激情在线观看一区二区三区 | 99久久国产综合精品麻豆 | 日韩精品三区 | 亚洲精品在线免费 | a级毛片基地 | 日本不卡免费新一二三区 | 久久久久久高潮国产精品视 | 亚洲国产精品一区在线观看 | 欧美日韩中文字幕在线 | 一级二级三级在线观看 | 日韩手机在线看片 | 极品的亚洲| 欧美成人精品激情在线观看 | 伊人久久国产 | 午夜视频在线免费观看 | 国产美女黄色片 | 亚洲男女视频在线观看 | 一二三区av | 久久久999成人 | 伊人欧美视频 | 国产成人麻豆免费观看 | 久久久久久久久久性 | 国产精品日日摸夜夜添夜夜av | 国产精品免费一区二区三区四区 | 亚洲精品成人网 | 性一交一乱一伦视频免费观看 | 国产精品伦理一区二区三区 | aaa综合国产| 欧美成人精品一区二区男人看 | 亚洲精品日韩精品 | 中文字幕亚洲精品 | 日韩精品一区二区三区第95 | a在线视频| 精品91久久| 亚洲精品一区二区 |