zoukankan      html  css  js  c++  java
  • Sqlite 常用操作及使用EF连接Sqlite

    Sqlite是一个很轻,很好用的数据库。兼容性很强,由于是一款本地文件数据库,不需要安装任何数据库服务,只需引入第三方开发包就可以。Sqlite的处理速度比MySql和PostgreSQL更快,性能很不错。毕竟本地数据库读写操作是直接从本地读取,不需要网络层传输。

    .net 下的使用:

    第一步引入SQlite开发包,这里需要注意选择System.Data.Sqlite包,如果是.net core 程序的话就选择core版本。

    Sqlite支持EF,需要使用EF操作的话就引入下图所示的开发包,我用的是.net core 所以引入的是CORE版本,

    引入成功后就可以操作了,跟传统数据库一样,第一步是连接数据库,由于Sqlite是本地数据库,所以连接地址就是数据库文件的存放路径

    //数据库连接地址

      public string path_DB = Directory.GetParent(System.Environment.CurrentDirectory).FullName + "/FinanceDataFrameWorkCore/net5.0/financeData.sqlite";

    //连接数据库,连接成功后打开通道

      public SQLiteConnection m_dbConnection;
      public void connectToDatabase(string DBPath, string Version = "3")
      {
          Console.WriteLine(DBPath);
    
          m_dbConnection = new SQLiteConnection("Data Source=" + DBPath + ";Version=" + Version + ";");
          m_dbConnection.Open();
      }

    //然后就可以 进行数据库操作了,SQlite支持ADO操作,所以跟使用ADO.net 操作数据库一样,设置SQLiteCommand ,然后执行。

          public int ExecuteNonQuery(string LiteSQL)
            {
                SQLiteCommand sQLiteCommand = new SQLiteCommand(LiteSQL, m_dbConnection);
                return sQLiteCommand.ExecuteNonQuery();
            }

    //查询数据表格

          public DataTable GetSelectTable(string LiteSQL)
            {
                SQLiteCommand cmd = new SQLiteCommand(LiteSQL, m_dbConnection);
                SQLiteDataAdapter sQLiteDataAdapter = new SQLiteDataAdapter(cmd);
                DataSet dataSet = new DataSet();
                sQLiteDataAdapter.Fill(dataSet);
                return dataSet.Tables[0];
            }

    //一个简单的SqliteHelper

      public class SqliteHelper
        {
            public SQLiteConnection m_dbConnection;
    
            public string path_sqlite = Directory.GetParent(System.Environment.CurrentDirectory).FullName + "/FinanceDataFrameWorkCore/net5.0/financeData.sqlite";
    
            public SqliteHelper()
            {
                connectToDatabase(path_sqlite);
            }
    
            public void createNewDatabase(string DataBaseName = "demo.sqlite")
            {
                SQLiteConnection.CreateFile(DataBaseName);
            }
    
            public void connectToDatabase(string DBPath, string Version = "3")
            {
                Console.WriteLine(DBPath);
    
                m_dbConnection = new SQLiteConnection("Data Source=" + DBPath + ";Version=" + Version + ";");
                m_dbConnection.Open();
            }
    
            public void CloseConnection()
            {
                m_dbConnection.Close();
            }
    
    public int ExecuteNonQuery(string LiteSQL)
            {
                SQLiteCommand sQLiteCommand = new SQLiteCommand(LiteSQL, m_dbConnection);
                return sQLiteCommand.ExecuteNonQuery();
            }
    
            public DataTable GetSelectTable(string LiteSQL)
            {
                SQLiteCommand cmd = new SQLiteCommand(LiteSQL, m_dbConnection);
                SQLiteDataAdapter sQLiteDataAdapter = new SQLiteDataAdapter(cmd);
                DataSet dataSet = new DataSet();
                sQLiteDataAdapter.Fill(dataSet);
                return dataSet.Tables[0];
            }
    
            public SQLiteDataReader GetSelectTableReader(string LiteSQL)
            {
                SQLiteCommand sQLiteCommand = new SQLiteCommand(LiteSQL, m_dbConnection);
                return sQLiteCommand.ExecuteReader();
            }
        }
    }

    如果要使用ef操作SQlite的话也可以,sqlite的ef操作跟其他数据库一样。指定好数据库实体表名称,实体字段名保持和数据库一致,然后配置好数据库上下文。

     

    数据库关联上下文配置

        public class FinanceDataContext : DbContext
        {
            protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
            {
                //注入Sqlite链接字符串
               
                string path_DB = Environment.CurrentDirectory + "/financeData.sqlite";
    
                optionsBuilder.UseSqlite($"Data Source={path_DB}");
            }
            public DbSet<FinanceData> FinanceData { set; get; }
    
        }

    配置好实体后就可以进行操作啦,我这里没有配置实体自动生成表,需要在数据库建好数据表跟实体里保持一致就可以了。然后就可用ef +Linq进行数据库读写操作了

  • 相关阅读:
    Flutter——去除字符串中的所有空格
    Flutter——类似淘口令复制弹窗(避免踩坑)
    Flutter——TextField输入框输入内容后,光标焦点保持在最后
    Flutter——TextField输入框光标焦点的获取和释放
    Flutter——设置text的最大长度
    Unity3D获得服务器时间/网络时间/后端时间/ServerTime,适合单机游戏使用
    Cocoapods问题汇总
    scrollToItem出错
    一种消除局部自适应对比度增强算法方块效应的方法
    实时和非实时调度策略测试总结
  • 原文地址:https://www.cnblogs.com/motion/p/15352227.html
Copyright © 2011-2022 走看看