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

C#?SQLite庫(kù)使用技巧

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

1、SQLite介紹

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

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

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

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

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

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

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

sqliteHelper中主要用到2個(gè)方法:

  a、ExecuteNonQuery 執(zhí)行Insert,Update、Delete、創(chuàng)建庫(kù)等操作,返回值是數(shù)據(jù)庫(kù)影響的行數(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ù)庫(kù)操作(新增、更新或刪除)
        /// </summary>
        /// <param name="cmdstr">連接字符串</param>
        /// <param name="cmdParms">SqlCommand對(duì)象</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對(duì)象,數(shù)據(jù)庫(kù)鏈接,事務(wù),需要執(zhí)行的對(duì)象,參數(shù)等的初始化
        /// </summary>
        /// <param name="cmd">Command對(duì)象</param>
        /// <param name="conn">Connection對(duì)象</param>
        /// <param name="trans">Transcation對(duì)象</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ù)庫(kù)查詢
        /// </summary>
        /// <param name="cmdstr">sql語(yǔ)句</param>
        /// <param name="tableName">表名</param>
        /// <returns>DataSet對(duì)象</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)動(dòng)態(tài)創(chuàng)建數(shù)據(jù)庫(kù)文件,通過(guò)下面的方法即可創(chuàng)建出Analysis.db名稱的數(shù)據(jù)庫(kù)

        /// <summary>
        /// 數(shù)據(jù)庫(kù)路徑
        /// </summary>
        private static string databasepath = AppDomain.CurrentDomain.BaseDirectory + "DataBase\\";
        /// <summary>
        /// 數(shù)據(jù)庫(kù)名稱
        /// </summary>
        private const string databasename = "Analysis.db";
        /// <summary>
        /// 創(chuàng)建數(shù)據(jù)庫(kù)
        /// </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ù)庫(kù):" + databasename + "成功!");
                }
            }
            catch (Exception ex)
            {
                LogHelper.Debug(ex);
            }
        }

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

    ①打開連接

    ②開始事務(wù)

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

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

    ⑤關(guān)閉連接

代碼見下圖,開始事務(wù)后通過(guò)SQLiteCommand的ExecuteNonQuery()方法進(jìn)行內(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庫(kù)使用的文章就介紹到這了,更多相關(guān)C# SQLite庫(kù)使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

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

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

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

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

    詳談.net中的垃圾回收機(jī)制

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

    WinForm項(xiàng)目中添加幫助文檔功能

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

    使用C#自制一個(gè)Windows安裝包的詳細(xì)過(guò)程

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

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

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

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

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

    C#泛型Dictionary的用法實(shí)例詳解

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

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

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

最新評(píng)論

深圳市| 尚义县| 临沭县| 英山县| 延边| 方城县| 祁门县| 海门市| 五莲县| 宜昌市| 舞阳县| 府谷县| 屏东县| 德令哈市| 沈丘县| 马尔康县| 大竹县| 华阴市| 合作市| 托克托县| 鹿泉市| 苗栗市| 多伦县| 奎屯市| 景宁| 株洲市| 历史| 阿拉尔市| 从化市| 顺昌县| 安仁县| 怀宁县| 额敏县| 石首市| 灯塔市| 赫章县| 九江县| 秀山| 连城县| 八宿县| 梅河口市|