久久久久久久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配置文件示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
主站蜘蛛池模板: 亚洲精品影院 | 一级香蕉视频 | 欧美色综合网 | 国产精品一区二区性色av | 五月天一区二区三区 | 一级黄色免费视频 | eeuss一区二区 | 国产精品久久久久久无人区 | 日韩在线不卡视频 | 在线国产91 | 国产欧美在线 | 欧美亚洲国产精品 | 91av免费| 日韩视频精品 | 欧美精品一区在线观看 | 日日干日日操 | 日韩精品一区在线 | 国产精品久久免费 | 免费黄色小视频 | 日韩欧美精品在线观看 | 欧美一区二区三区免费 | 精品国产乱码久久久久久蜜柚 | 成人夜色| 在线亚洲欧美 | 欧美综合久久 | 成人在线免费观看网站 | 麻豆av网| 国产视频一区二区在线播放 | 久久视频在线 | 亚洲精品乱码久久久久久动漫 | 日韩一区中文字幕 | 久久老司机 | 少妇xxxx69| 精品国产乱码一区二区三 | 欧美视频免费 | 国产一区二区日韩 | 欧美一区二区视频在线观看 | 三级视频在线观看 | 亚洲天天看 | 男男成人高潮片免费网站 | 免费a在线观看 |