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

C#結(jié)合SQLite數(shù)據(jù)庫使用方法及應(yīng)用場景

 更新時間:2025年07月10日 11:08:43   作者:CE貝多芬  
本文介紹SQLite的輕量、零配置、跨平臺特性及其在C#中的應(yīng)用,涵蓋數(shù)據(jù)庫創(chuàng)建、增刪改查操作及SQL語法,通過NuGet安裝組件實現(xiàn)數(shù)據(jù)管理,并使用DataTable處理查詢結(jié)果,感興趣的朋友一起看看吧

一、關(guān)于SQLite

SQLite 是一個輕量級的嵌入式關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS)。與傳統(tǒng)的數(shù)據(jù)庫管理系統(tǒng)(如 MySQL、PostgreSQL 或 SQL Server)不同,SQLite 并不需要運行單獨的服務(wù)器進程,它的數(shù)據(jù)庫存儲在一個單一的文件中,因此被稱為“嵌入式數(shù)據(jù)庫”。SQLite 常常用于需要小型、快速且無需復(fù)雜配置的應(yīng)用場景。

 SQLite的特點:

1. 輕量級:

   SQLite 是一個非常小的數(shù)據(jù)庫引擎,源代碼可以輕松集成到各種應(yīng)用程序中,適合嵌入式系統(tǒng)和移動應(yīng)用。其核心庫的大小通常只有幾百 KB。

2. 零配置:

   與傳統(tǒng)的數(shù)據(jù)庫管理系統(tǒng)不同,SQLite 不需要配置服務(wù)器、網(wǎng)絡(luò)連接或管理員權(quán)限。它直接通過文件系統(tǒng)進行操作,創(chuàng)建一個單一的數(shù)據(jù)庫文件來存儲所有數(shù)據(jù)。

3. 跨平臺支持:

   SQLite 是跨平臺的,可以在幾乎所有操作系統(tǒng)上運行,包括 Windows、Linux、macOS、iOS、Android 等。它使得開發(fā)者能夠在不同平臺間共享數(shù)據(jù)。

4. 文件存儲:

   所有的數(shù)據(jù)存儲都在一個單一的文件中,這個文件通常很容易復(fù)制、備份和移動。

5. 支持標準SQL:

   SQLite 支持 SQL-92 標準的大部分功能,包括查詢、事務(wù)、觸發(fā)器、索引等功能,使得開發(fā)者可以使用熟悉的 SQL 語法進行數(shù)據(jù)操作。

6. 事務(wù)性:

   SQLite 支持事務(wù),能夠確保數(shù)據(jù)庫的操作具有原子性、持久性、一致性和隔離性(ACID 特性)。即使在應(yīng)用程序崩潰或斷電的情況下,數(shù)據(jù)也能夠保持一致性。

7. 無服務(wù)器:

   SQLite 是一個無服務(wù)器數(shù)據(jù)庫,它直接嵌入到應(yīng)用程序中。它不需要啟動獨立的數(shù)據(jù)庫服務(wù)器進程,因此啟動速度快,資源消耗小。

 使用場景:

1. 移動應(yīng)用:

   因為 SQLite 輕便且不需要復(fù)雜配置,它非常適合用于移動設(shè)備(如 Android 和 iOS)的數(shù)據(jù)存儲。

2. 桌面應(yīng)用:

   在小型桌面應(yīng)用中,SQLite 是一種理想的數(shù)據(jù)庫解決方案,尤其是那些不需要多個并發(fā)用戶的應(yīng)用。

3. Web應(yīng)用:

   SQLite 也可以作為一些中小型網(wǎng)站的后端數(shù)據(jù)庫,尤其是在開發(fā)階段或低流量的網(wǎng)站中。

4. 物聯(lián)網(wǎng)(IoT)設(shè)備:

   SQLite 常被用在物聯(lián)網(wǎng)設(shè)備中,作為嵌入式數(shù)據(jù)庫存儲數(shù)據(jù)。

 總結(jié):

SQLite 由于其高效、簡單、零配置、跨平臺的特性,在許多應(yīng)用場景中都得到了廣泛的應(yīng)用。它對于開發(fā)者來說是一款非常方便的工具,尤其適用于嵌入式系統(tǒng)、桌面軟件、移動應(yīng)用等不需要復(fù)雜數(shù)據(jù)庫系統(tǒng)的場合。
 

二、常用的sql語句(CRUD)

*. 創(chuàng)建一個新的數(shù)據(jù)庫表

CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,  -- 自動遞增的ID
    name TEXT NOT NULL,                    -- 用戶名
    age INTEGER NOT NULL                   -- 年齡
);

 1. 給數(shù)據(jù)庫中添加數(shù)據(jù)

插入數(shù)據(jù)

INSERT INTO "表名" (字段1,字段2,字段3...) VALUES(值1,值2,值3...);

插入多條數(shù)據(jù)

INSERT INTO "表名" (字段1,字段2,字段3...) VALUES(值1,值2,值3...),(值1,值2,值3...);

2. 刪除數(shù)據(jù)庫中的數(shù)據(jù)

刪除特定數(shù)據(jù)

DELETE FROM users WHERE id = 1;

刪除所有數(shù)據(jù)

DELETE FROM users;

3. 查找數(shù)據(jù)

查詢所有數(shù)據(jù) 

SELECT * FROM users;

 查詢特定列的數(shù)據(jù)

SELECT name, age FROM users;

 查詢符合條件的數(shù)據(jù)

關(guān)系運算符

sql語句中用到的sql運算符
符號 含義
>大于
>=大于等于
<小于
<=小于等于
!=或<>不等于
==或=等于 
SELECT * FROM users WHERE age > 30;

查詢范圍運算

SELECT * FROM users WHERE age BETWEEN 1 AND 100;
// 如果表里有日期類型的數(shù)據(jù)的話
SELECT * FROM users WHERE date BETWEEN '1981-01-01' AND '1981-12-31';

模糊查詢

符號含義
_匹配任意一個字符
%匹配任意多個字符
SELECT * FROM users WHERE name LIKE '%er%';
SELECT * FROM users WHERE name LIKE '_e_';

查詢字段為空的內(nèi)容

SELECT * FROM users WHERE age IS NULL;
SELECT * FROM users WHERE age IS NOT NULL;

查詢單挑數(shù)據(jù) 

SELECT * FROM users WHERE id = 1;

附加多個條件

SELECT * FROM users WHERE name = 'Peter' AND age > 20;

4. 更新數(shù)據(jù) 

更新數(shù)據(jù)庫中某個字段的值為某個值

UPDATE users SET age = 26 WHERE id = 1;

 5. 查詢排序

讓數(shù)據(jù)庫中一列或多列按照升序或者降序的順序排序。

名稱含義
ASC升序
DESC降序

 查詢表中所有信息按照age降序排列

SELECT * FROM users ORDER BY age DESC;

 查詢表中所有信息按照age降序排列,如果age相同那么按照id升序排列

SELECT * FROM users ORDER BY age DESC,id ASC;

三、用C#代碼封裝SQLite數(shù)據(jù)庫的各個方法實現(xiàn)增刪改查

NuGet安裝 System.Data.SQLite組件

C#連接SQLite數(shù)據(jù)庫實現(xiàn)增刪改查

namespace DB
{
    public class DataBase
    {
        private readonly string _connectionString;
        // 數(shù)據(jù)庫文件位置
        private static readonly string databasePath = @"數(shù)據(jù)庫文件路徑"; 
        public DataBase()
        {
            _connectionString = $"Data Source={databasePath};Version=3;";
        }
        /// <summary>
        /// 打開數(shù)據(jù)庫連接
        /// </summary>
        /// <returns>SQLiteConnection 對象</returns>
        private SQLiteConnection OpenConnection()
        {
            var connection = new SQLiteConnection(_connectionString);
            connection.Open();
            return connection;
        }
        /// <summary>
        /// 通用方法:執(zhí)行非查詢命令(增、刪、改)
        /// </summary>
        /// <param name="query">SQL 查詢語句</param>
        /// <param name="parameters">查詢參數(shù)</param>
        /// <returns>受影響的行數(shù)</returns>
        public int ExecuteNonQuery(string query, Dictionary<string, object> parameters = null)
        {
            using var connection = OpenConnection();
            using var command = new SQLiteCommand(query, connection);
            // 添加參數(shù)
            if (parameters != null)
            {
                foreach (var param in parameters)
                {
                    command.Parameters.AddWithValue(param.Key, param.Value);
                }
            }
            return command.ExecuteNonQuery();
        }
        /// <summary>
        /// 通用方法:執(zhí)行查詢并返回結(jié)果
        /// </summary>
        /// <param name="query">SQL 查詢語句</param>
        /// <param name="parameters">查詢參數(shù)</param>
        /// <returns>查詢結(jié)果 DataTable</returns>
        public DataTable ExecuteQuery(string query, Dictionary<string, object> parameters = null)
        {
            using var connection = OpenConnection();
            using var command = new SQLiteCommand(query, connection);
            // 添加參數(shù)
            if (parameters != null)
            {
                foreach (var param in parameters)
                {
                    command.Parameters.AddWithValue(param.Key, param.Value);
                }
            }
            using (var adapter = new SQLiteDataAdapter(command))
            {
                var dataTable = new DataTable();
                adapter.Fill(dataTable);
                return dataTable;
            }
        }
        /// <summary>
        /// 增加方法
        /// </summary>
        /// <param name="tableName"></param>
        /// <param name="data"></param>
        public void Insert(string tableName, Dictionary<string, object> data)
        {
            var columns = string.Join(", ", data.Keys);
            var placeholders = string.Join(", ", data.Keys.Select(key => "@" + key));
            var query = $"INSERT INTO {tableName} ({columns}) VALUES ({placeholders})";            
            ExecuteNonQuery(query, data);
        }
        /// <summary>
        /// 刪除方法
        /// </summary>
        /// <param name="tableName"></param>
        /// <param name="whereClause"></param>
        /// <param name="parameters"></param>
        public void Delete(string tableName, string whereClause, Dictionary<string, object> parameters)
        {
            var query = $"DELETE FROM {tableName} WHERE {whereClause}";
            ExecuteNonQuery(query, parameters);
        }
        /// <summary>
        /// 查詢方法
        /// </summary>
        /// <param name="tableName"></param>
        /// <param name="whereClause"></param>
        /// <param name="parameters"></param>
        /// <returns></returns>
        public DataTable Select(string tableName, string whereClause = null, Dictionary<string, object> parameters = null)
        {
            var query = $"SELECT * FROM {tableName}";
            if (!string.IsNullOrEmpty(whereClause))
            {
                query += $" WHERE {whereClause}";
            }
            return ExecuteQuery(query, parameters);
        }
        /// <summary>
        /// 更新方法
        /// </summary>
        /// <param name="tableName"></param>
        /// <param name="data"></param>
        /// <param name="whereClause"></param>
        /// <param name="parameters"></param>
        public void Update(string tableName, Dictionary<string, object> data, string whereClause, Dictionary<string, object> parameters)
        {
            // var setClause = string.Join(", ", data.Keys, key => $"{key} = @{key}");
            var setClause = string.Join(", ", data.Keys.Select(key => $"{key} = @{key}"));
            var query = $"UPDATE {tableName} SET {setClause} WHERE {whereClause}";
            // 合并參數(shù)
            if (parameters == null)
            {
                parameters = new Dictionary<string, object>();
            }
            foreach (var param in data)
            {
                parameters[$"@{param.Key}"] = param.Value;
            }
            ExecuteNonQuery(query, parameters);
        }
    }
}

創(chuàng)建數(shù)據(jù)庫對象,并進行調(diào)用增刪查改方法

創(chuàng)建數(shù)據(jù)庫對象

private static readonly DB sqlite = new();

添加數(shù)據(jù)

給數(shù)據(jù)庫中所有非null值進行賦值。

sqlite.Insert("tabel", new Dictionary<string, object> {
    {"createTime",DateTime.Now },
    { "age",18},
    { "name","Peter"},
});

刪除數(shù)據(jù)

刪除表中字段為name,并且name為Peter的一條數(shù)據(jù)。

sqlite.Delete("tabel", "name = @name", 
    new Dictionary<string, object> { { "@name","Peter"  } 
});

查找數(shù)據(jù)

查找表中的name字段為Peter的全部信息

sqlite.Select("tabel","name = @name", new Dictionary<string, object>
{
    {"name","Peter" }
});

更新數(shù)據(jù)

將數(shù)據(jù)庫中name字段為Peter的數(shù)據(jù)中的age字段改為25.

sqlite.Update(new Dictionary<string, object> { { "age", 25 } },
    "name = @name",
    new Dictionary<string, object>{ { "@name","Peter"}
});

四、獲取數(shù)據(jù)庫中查詢得到的全部數(shù)據(jù)

查詢返回的數(shù)據(jù)類型為DataTable類型。

DataTable dataTable = sqlite.Select("tabel","name = @name", new Dictionary<string, object>
{
    {"name","Peter" }
});
foreach (DataRow row in dataTable.Rows)
{
    Console.WriteLine(row["createTime"]);
    Console.WriteLine(row["age"]);
    Console.WriteLine(row["name"]);
}

查詢當前條件在數(shù)據(jù)庫中是否有匹配的內(nèi)容。

DataTable dataTable = sqlite.Select("tabel","name = @name", new Dictionary<string, object>
{
    {"name","Peter" }
});
if(dataTable.Rows.Count==0) Console.WriteLine("在數(shù)據(jù)庫中沒有找到指定內(nèi)容");

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

相關(guān)文章

  • Gridview自動排序功能的實現(xiàn)

    Gridview自動排序功能的實現(xiàn)

    本篇文章主要是對Gridview自動排序功能的實現(xiàn)代碼進行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-01-01
  • Unity UGUI教程之實現(xiàn)滑頁效果

    Unity UGUI教程之實現(xiàn)滑頁效果

    使用UGUI提供的ScrollRect和ScrollBar組件實現(xiàn)基本滑動以及自己控制每次移動一頁來達到滑頁的效果。具體實現(xiàn)思路請參考下本教程
    2016-04-04
  • c#實現(xiàn)攝像頭拍照功能示例

    c#實現(xiàn)攝像頭拍照功能示例

    這篇文章主要介紹了c#實現(xiàn)攝像頭拍照功能示例,需要的朋友可以參考下
    2014-04-04
  • C#集合本質(zhì)之堆棧的用法詳解

    C#集合本質(zhì)之堆棧的用法詳解

    本文詳細講解了C#集合本質(zhì)之堆棧的用法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • C#實現(xiàn)計算器精簡版

    C#實現(xiàn)計算器精簡版

    這篇文章主要為大家詳細介紹了C#實現(xiàn)計算器精簡版,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C#類繼承自泛型集合的例子

    C#類繼承自泛型集合的例子

    在C#中,除了泛型字典外,你還可以繼承其他集合類型,本文通過實例代碼主要介紹了C#類繼承自泛型集合,需要的朋友可以參考下
    2024-08-08
  • C#中實現(xiàn)HTTP請求通訊的操作指南

    C#中實現(xiàn)HTTP請求通訊的操作指南

    在現(xiàn)代軟件開發(fā)中,HTTP 協(xié)議是應(yīng)用程序與外部服務(wù)交互的核心橋梁,C# 作為 .NET 生態(tài)的主力語言,提供了豐富而成熟的 HTTP 通訊能力,本文將系統(tǒng)介紹 C# 中實現(xiàn) HTTP 請求的技術(shù)選型、核心概念、常見場景及最佳實踐,需要的朋友可以參考下
    2026-05-05
  • C#開發(fā)Winform實現(xiàn)文件操作案例

    C#開發(fā)Winform實現(xiàn)文件操作案例

    這篇文章介紹了C#開發(fā)Winform實現(xiàn)文件操作的案例,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • C#設(shè)計模式之簡單工廠模式

    C#設(shè)計模式之簡單工廠模式

    這篇文章介紹了C#設(shè)計模式之簡單工廠模式,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • C#實現(xiàn)文字轉(zhuǎn)語音功能

    C#實現(xiàn)文字轉(zhuǎn)語音功能

    這篇文章主要為大家詳細介紹了C#實現(xiàn)文字轉(zhuǎn)語音功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評論

莱西市| 清丰县| 唐海县| 铁岭县| 项城市| 雅安市| 彰化县| 乾安县| 会昌县| 永济市| 闽侯县| 醴陵市| 盖州市| 拉孜县| 霍州市| 曲水县| 宁城县| 海宁市| 镇原县| 固阳县| 铅山县| 焉耆| 铅山县| 周至县| 平江县| 米易县| 微博| 五河县| 昌宁县| 柯坪县| 绍兴县| 确山县| 柘城县| 蕉岭县| 延川县| 龙南县| 临沭县| 张家口市| 济阳县| 安阳市| 桐庐县|