最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#?SQLite庫使用技巧

 更新時間:2022年01月07日 15:29:06   作者:程序猿evint  
SQLite是一個開源、免費的小型RDBMS(關(guān)系型數(shù)據(jù)庫),能獨立運行、無服務(wù)器、零配置、支持事物,用C實現(xiàn),內(nèi)存占用較小,支持絕大數(shù)的SQL92標(biāo)準(zhǔn)。下面跟隨小編一起看下C#?SQLite庫使用

1、SQLite介紹

SQLite,是一款輕型的數(shù)據(jù)庫,是遵守的ACID關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它包含在一個相對小的C庫中。它的設(shè)計目標(biāo)嵌入式是的,而且已經(jīng)在很多中使用了它,它占用資源非常的低,在嵌入式設(shè)備中,可能只需要幾百K的內(nèi)存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統(tǒng),同時能夠跟很多程序語言相結(jié)合,比如 Tcl、C#、PHP、Java等。

SQLite is a software library that implements a self-contained, serverless, zero-configuration, transactional SQL database engine.

SQLite是一個開源、免費的小型RDBMS(關(guān)系型數(shù)據(jù)庫),能獨立運行、無服務(wù)器、零配置、支持事物,用C實現(xiàn),內(nèi)存占用較小,支持絕大數(shù)的SQL92標(biāo)準(zhǔn)。

SQLite數(shù)據(jù)庫官方主頁:http://www.sqlite.org/index.html

2、C#下調(diào)用SQLite數(shù)據(jù)庫

在NuGet程序包內(nèi),搜索System.Data.Sqlite,安裝Sqlite類庫

3、在C#程序內(nèi)添加SqliteHelper

sqliteHelper中主要用到2個方法:

  a、ExecuteNonQuery 執(zhí)行Insert,Update、Delete、創(chuàng)建庫等操作,返回值是數(shù)據(jù)庫影響的行數(shù)

  b、ExecuteDataSet執(zhí)行Select操作,返回查詢數(shù)據(jù)集

    public class SQLiteHelper
    {
        public static string ConnectionString = "Data Source =" + Environment.CurrentDirectory + @"\database.db" + ";Pooling = true; FailIfMissing = true";
 
        /// <summary>
        /// 執(zhí)行數(shù)據(jù)庫操作(新增、更新或刪除)
        /// </summary>
        /// <param name="cmdstr">連接字符串</param>
        /// <param name="cmdParms">SqlCommand對象</param>
        /// <returns>受影響的行數(shù)</returns>
        public int ExecuteNonQuery(string cmdstr, params SQLiteParameter[] cmdParms)
        {
            int result = 0;
            using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))
            {
                SQLiteTransaction trans = null;
                SQLiteCommand cmd = new SQLiteCommand(cmdstr);
                PrepareCommand(cmd, conn, ref trans, true, cmd.CommandType, cmd.CommandText, cmdParms);
                try
                {
                    result = cmd.ExecuteNonQuery();
                    trans.Commit();
                }
                catch (Exception ex)
                {
                    trans.Rollback();
                    throw ex;
                }
            }
            return result;
        }
 
        /// <summary>
        /// 預(yù)處理Command對象,數(shù)據(jù)庫鏈接,事務(wù),需要執(zhí)行的對象,參數(shù)等的初始化
        /// </summary>
        /// <param name="cmd">Command對象</param>
        /// <param name="conn">Connection對象</param>
        /// <param name="trans">Transcation對象</param>
        /// <param name="useTrans">是否使用事務(wù)</param>
        /// <param name="cmdType">SQL字符串執(zhí)行類型</param>
        /// <param name="cmdText">SQL Text</param>
        /// <param name="cmdParms">SQLiteParameters to use in the command</param>
        private static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, ref SQLiteTransaction trans, bool useTrans, CommandType cmdType, string cmdText, params SQLiteParameter[] cmdParms)
        {
            try
            {
                if (conn.State != ConnectionState.Open)
                    conn.Open();
 
                cmd.Connection = conn;
                cmd.CommandText = cmdText;
 
                if (useTrans)
                {
                    trans = conn.BeginTransaction(IsolationLevel.ReadCommitted);
                    cmd.Transaction = trans;
                }
 
                cmd.CommandType = cmdType;
 
                if (cmdParms != null)
                {
                    foreach (SQLiteParameter parm in cmdParms)
                        cmd.Parameters.Add(parm);
                }
            }
            catch
            {
 
            }
        }
 
        /// <summary>
        /// 數(shù)據(jù)庫查詢
        /// </summary>
        /// <param name="cmdstr">sql語句</param>
        /// <param name="tableName">表名</param>
        /// <returns>DataSet對象</returns>
        public DataSet ExecuteDataSet(string cmdstr)
        {
            DataSet ds = new DataSet();
            SQLiteConnection conn = new SQLiteConnection(ConnectionString);
            SQLiteTransaction trans = null;
            SQLiteCommand cmd = new SQLiteCommand(cmdstr);
            PrepareCommand(cmd, conn, ref trans, false, cmd.CommandType, cmd.CommandText);
            try
            {
                SQLiteDataAdapter sda = new SQLiteDataAdapter(cmd);
                sda.Fill(ds);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (cmd.Connection != null)
                {
                    if (cmd.Connection.State == ConnectionState.Open)
                    {
                        cmd.Connection.Close();
                    }
                }
            }
            return ds;
        }

4、Sqlite部分技巧 

  a、SQLiteConnection類的CreateFile方法,在程序內(nèi)動態(tài)創(chuàng)建數(shù)據(jù)庫文件,通過下面的方法即可創(chuàng)建出Analysis.db名稱的數(shù)據(jù)庫

        /// <summary>
        /// 數(shù)據(jù)庫路徑
        /// </summary>
        private static string databasepath = AppDomain.CurrentDomain.BaseDirectory + "DataBase\\";
        /// <summary>
        /// 數(shù)據(jù)庫名稱
        /// </summary>
        private const string databasename = "Analysis.db";
        /// <summary>
        /// 創(chuàng)建數(shù)據(jù)庫
        /// </summary>
        public static void CreateDataBase()
        {
            try
            {
                if (!File.Exists(databasepath + databasename))
                {
                    if (!Directory.Exists(databasepath))
                        Directory.CreateDirectory(databasepath);
                    SQLiteConnection.CreateFile(databasepath + databasename);
                    LogHelper.Info("創(chuàng)建數(shù)據(jù)庫:" + databasename + "成功!");
                }
            }
            catch (Exception ex)
            {
                LogHelper.Debug(ex);
            }
        }

  b、在寫入高頻數(shù)據(jù)的時候,需要使用事務(wù),如果反復(fù)進行(打開->插入>關(guān)閉)操作,sqlite效率1秒鐘插入也就2條,使用程序進行插入就會發(fā)現(xiàn)輸入的頻率遠低于獲取到的數(shù)據(jù),大量的數(shù)據(jù)被緩存到內(nèi)存中,為了處理入庫的速度慢,就要用到事務(wù),事務(wù)流程:

    ①打開連接

    ②開始事務(wù)

    ③循環(huán)在內(nèi)存中執(zhí)行插入命令

    ④提交事務(wù)寫入本地文件,如果出錯回滾事務(wù)

    ⑤關(guān)閉連接

代碼見下圖,開始事務(wù)后通過SQLiteCommand的ExecuteNonQuery()方法進行內(nèi)存提交

            using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))
            {
                using (SQLiteCommand cmd = new SQLiteCommand())
                {
                    DbTransaction trans = null;
                    try
                    {
                        cmd.Connection = conn;
                        conn.Open();
                        //開啟事務(wù)
                        using (trans = conn.BeginTransaction())
                        {
                            while (_list.Count > 0)
                            {
                                GpsDataClass _gps = _list[0];
                                try
                                {
                                    if (_gps != null)
                                    {
                                        SQLiteHelper sh = new SQLiteHelper(cmd);
                                        var dic = new Dictionary<string, object>();
                                        dic["CarPlate"] = _gps.CarPlate;
                                        dic["CarIpAddress"] = _gps.CarIpAddress;
                                        dic["PosX1"] = _gps.PosX1;
                                        dic["PosY1"] = _gps.PosY1;
                                        dic["PosZ1"] = _gps.PosZ1;
                                        dic["Heading1"] = _gps.Heading1;
                                        dic["PosStatus1"] = _gps.PosStatus1;
                                        dic["NumF1"] = _gps.NumF1;
                                        dic["NumB1"] = _gps.NumB1;
                                        dic["PosX2"] = _gps.PosX2;
                                        dic["PosY2"] = _gps.PosY2;
                                        dic["PosZ2"] = _gps.PosZ2;
                                        dic["Heading2"] = _gps.Heading2;
                                        dic["PosStatus2"] = _gps.PosStatus2;
                                        dic["NumF2"] = _gps.NumF2;
                                        dic["NumB2"] = _gps.NumB2;
                                        dic["Speed"] = _gps.Speed;
                                        dic["Signal"] = _gps.Signal;
                                        dic["NowTime"] = _gps.NowTime;
                                        sh.Insert("GpsRecord", dic);
                                        _list.RemoveAt(0);
                                    }
                                }
                                catch (Exception ex)
                                {
                                    LogHelper.Debug(ex);
                                }
                            }
                            trans.Commit();
                        }
                    }
                    catch (Exception ex)
                    {
                        trans.Rollback();
                        LogHelper.Debug(ex);
                    }
                    conn.Close();
                }
            }

到此這篇關(guān)于C# SQLite庫使用的文章就介紹到這了,更多相關(guān)C# SQLite庫使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用VS2019生成C#應(yīng)用安裝包的方法步驟

    使用VS2019生成C#應(yīng)用安裝包的方法步驟

    本文主要介紹了使用VS2019生成C#應(yīng)用安裝包的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • C#中委托和事件的區(qū)別實例解析

    C#中委托和事件的區(qū)別實例解析

    這篇文章主要介紹了C#中委托和事件的區(qū)別,并分別以實例形式展示了通過委托執(zhí)行方法與通過事件執(zhí)行方法,以及相關(guān)的執(zhí)行流程與原理分析,需要的朋友可以參考下
    2014-09-09
  • C#關(guān)于反射加載的問題

    C#關(guān)于反射加載的問題

    C#關(guān)于反射加載的問題,需要的朋友可以參考下。
    2011-07-07
  • 詳談.net中的垃圾回收機制

    詳談.net中的垃圾回收機制

    詳談.net中的垃圾回收機制,需要的朋友可以參考一下
    2013-04-04
  • WinForm項目中添加幫助文檔功能

    WinForm項目中添加幫助文檔功能

    這篇文章介紹了WinForm項目中添加幫助文檔功能的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 使用C#自制一個Windows安裝包的詳細過程

    使用C#自制一個Windows安裝包的詳細過程

    這篇文章主要介紹了如何使用C#自制一個Windows安裝包,文中通過圖文結(jié)合的方式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-07-07
  • C#實現(xiàn)串口調(diào)試工具

    C#實現(xiàn)串口調(diào)試工具

    這篇文章介紹了C#實現(xiàn)串口調(diào)試工具的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • c#求點到直線的投影點坐標(biāo)

    c#求點到直線的投影點坐標(biāo)

    這篇文章主要介紹了c#求直線外一點到該直線的投影點,大家參考使用吧
    2013-12-12
  • C#泛型Dictionary的用法實例詳解

    C#泛型Dictionary的用法實例詳解

    這篇文章主要介紹了C#泛型Dictionary的用法,并以實例的形式講述了對鍵值對的填充、移除及遍歷等操作,需要的朋友可以參考下
    2014-09-09
  • c#中多線程訪問winform控件的若干問題小結(jié)

    c#中多線程訪問winform控件的若干問題小結(jié)

    大部分情況下都會碰到使用多線程控制界面上控件信息的問題。然而我們并不能用傳統(tǒng)方法來解決這個問題,下面我將詳細的介紹
    2013-10-10

最新評論

孝义市| 南陵县| 曲周县| 堆龙德庆县| 钟祥市| 黑龙江省| 瓮安县| 新民市| 武义县| 澄江县| 旅游| 宜君县| 喜德县| 临桂县| 抚州市| 方城县| 海宁市| 吕梁市| 澄江县| 南召县| 新晃| 武胜县| 彭州市| 兴城市| 井陉县| 佛冈县| 江津市| 辽宁省| 罗甸县| 兴城市| 马尔康县| 德惠市| 峨眉山市| 固安县| 堆龙德庆县| 明溪县| 海淀区| 嘉定区| 巴东县| 潞西市| 阿拉善右旗|