Sqlite 常用操作及使用EF连接Sqlite
阅读原文时间:2023年07月12日阅读:1

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进行数据库读写操作了

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章