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

解決Sqlite“無法加載?DLL“e_sqlite3”:?找不到指定的模塊”的方法

 更新時(shí)間:2025年11月07日 09:34:02   作者:熊思宇  
這篇文章主要介紹了Sqlite“無法加載?DLL“e_sqlite3”:?找不到指定的模塊”的解決方法,文中通過代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用sqlite具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

今天在使用 NuGet 安裝 System.Data.SQLite 庫后,發(fā)現(xiàn)運(yùn)行就報(bào)錯(cuò):System.DllNotFoundException:“無法加載 DLL“e_sqlite3”: 找不到指定的模塊。 (異常來自 HRESULT:0x8007007E)。”

百度查了半天,啥都沒有,我也是醉了,問AI也沒問出個(gè)答案,回答全是亂七八糟的,于是我又查看了 System.Data.SQLite 的自述文件和包詳細(xì)信息,是這樣:

啥都沒寫,這種庫也是奇葩,我有點(diǎn)好奇能用在商業(yè)項(xiàng)目中么,一點(diǎn)規(guī)范都沒有,有點(diǎn)像個(gè)人開發(fā)者的行為。

我又搜了下 e_sqlite3,不是沒用就是要錢,what ??

后面我又在 百度 找 System.Data.SQLite 官網(wǎng),找到了這么一個(gè)地址

打開一看,剛好找到了答案,界面如下:

這里的描述文字寫著:

System.Data.SQLite is available on nuget.org. Typical usage would involve adding two packages, one for System.Data.SQLite, and one containing a native built of SQLite. For example:

翻譯成中文:

System.Data.SQLite 可在 nuget.org 上獲取。典型用法通常需要添加兩個(gè) NuGet 包:一個(gè)用于 System.Data.SQLite,另一個(gè)包含 SQLite 的本機(jī)構(gòu)建(例如 System.Data.SQLite.Core)。例如:

看到這里我算是知道了,還需要安裝另一個(gè)庫:SourceGear.sqlite3

這下就好辦了,于是我就裝了 SourceGear.sqlite3 這個(gè)庫,如下:

SourceGear.sqlite3 這個(gè)庫 包詳細(xì)信息這里有一段描述

This package contains builds of the native SQLite code for various platforms.  
    These builds have "e_sqlite3" as the base name.  The first three numbers in the version number of this package indicate the version of SQLite that was used to build it.  The fourth number, if there is one, is incremented as needed for packaging-specific changes.

翻譯成中文:

此軟件包包含適用于不同平臺的原生 SQLite 代碼構(gòu)建版本。這些構(gòu)建版本的基礎(chǔ)名稱均為 ??"e_sqlite3"??。軟件包版本號中的前三位數(shù)字表示構(gòu)建時(shí)所使用的 SQLite 版本,若存在第四位數(shù)字,則會根據(jù)打包相關(guān)的修改需求進(jìn)行遞增

好吧,我先搭建下 Sqlite 的環(huán)境,讓 Winform 能調(diào)用 Sqlite 進(jìn)行增刪改查,項(xiàng)目我就不上傳了,直接貼一個(gè) SqliteHelper.cs 好了

using System;
using System.Data;
using System.Data.SQLite;
using System.Collections.Generic;
using System.Reflection;

public class SqliteHelper
{
    /// <summary>
    /// 數(shù)據(jù)庫連接字符串
    /// </summary>
    public static string ConnectionString { get; set; } = "Data Source=work.db;Version=3;Pooling=True;Journal Mode=WAL;Cache=Shared;Synchronous=NORMAL;BusyTimeout=5000;";

    /// <summary>
    /// 執(zhí)行 插入、更新、刪除 操作
    /// </summary>
    /// <param name="sql">要執(zhí)行的SQL語句(INSERT/UPDATE/DELETE)</param>
    /// <param name="parameters">SQL參數(shù)數(shù)組,防止SQL注入</param>
    /// <returns>p1.是否成功,p2.錯(cuò)誤信息</returns>
    public static (bool, string) ExecuteSql(string sql, params SQLiteParameter[] parameters)
    {
        if (ConnectionString == null)
            return (false, "請先設(shè)置 ConnectionString");

        try
        {
            int line = 0;
            using (var conn = new SQLiteConnection(ConnectionString))
            {
                conn.Open();
                using (var cmd = new SQLiteCommand(sql, conn))
                {
                    if (parameters != null && parameters.Length > 0)
                        cmd.Parameters.AddRange(parameters);
                    // ExecuteNonQuery 返回受影響的行數(shù)
                    line = cmd.ExecuteNonQuery();
                }
                conn.Close();
            }
            return (true, null);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
            return (false, ex.Message);
        }
    }

    /// <summary>
    /// 執(zhí)行查詢SQL
    /// </summary>
    /// <param name="sql">SQL語句</param>
    /// <param name="parameters">SQL參數(shù)數(shù)組,防止SQL注入</param>
    /// <returns>p1.是否成功,p2.查詢的數(shù)據(jù),p3.錯(cuò)誤信息</returns>
    public static (bool, DataTable, string) Query(string sql, params SQLiteParameter[] parameters)
    {
        if (ConnectionString == null)
            return (false, null, "請先設(shè)置 ConnectionString");

        try
        {
            var dataTable = new DataTable();
            using (var conn = new SQLiteConnection(ConnectionString))
            {
                conn.Open();
                using (var cmd = new SQLiteCommand(sql, conn))
                {
                    if (parameters != null && parameters.Length > 0)
                        cmd.Parameters.AddRange(parameters);
                    //使用數(shù)據(jù)適配器填充 DataTable
                    using (var adapter = new SQLiteDataAdapter(cmd))
                        adapter.Fill(dataTable);
                }
                conn.Close();
            }
            return (true, dataTable, null);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
            return (false, null, ex.Message);
        }
    }

    /// <summary>
    /// 執(zhí)行查詢SQL
    /// </summary>
    /// <typeparam name="T">結(jié)果集列表中對象的類型,需提供無參構(gòu)造函數(shù)</typeparam>
    /// <param name="sql">SQL語句</param>
    /// <param name="parameters">SQL參數(shù)數(shù)組,防止SQL注入</param>
    /// <returns>p1.是否成功,p2.查詢的數(shù)據(jù),p3.錯(cuò)誤信息</returns>
    public static (bool, List<T>, string) Query<T>(string sql, params SQLiteParameter[] parameters) where T : new()
    {
        if (ConnectionString == null)
            return (false, null, "請先設(shè)置 ConnectionString");

        List<T> list = new List<T>();
        try
        {
            using (var conn = new SQLiteConnection(ConnectionString))
            {
                conn.Open();
                using (var cmd = new SQLiteCommand(sql, conn))
                {
                    if (parameters != null && parameters.Length > 0)
                        cmd.Parameters.AddRange(parameters);
                    
                    using (var reader = cmd.ExecuteReader())
                    {
                        // 獲取一次性獲取列的元數(shù)據(jù),用于反射匹配屬性
                        var schemaTable = reader.GetSchemaTable();
                        // 建立列名到序號的映射
                        var ordinals = new Dictionary<string, int>();
                        foreach (DataRow col in schemaTable.Rows)
                        {
                            string colName = col["ColumnName"].ToString();
                            ordinals[colName] = (int)col["ColumnOrdinal"];
                        }
                        // 獲取泛型類型的所有可寫屬性
                        Type objType = typeof(T);
                        PropertyInfo[] properties = objType.GetProperties();
                        while (reader.Read())
                        {
                            T obj = new T();
                            foreach (PropertyInfo prop in properties)
                            {
                                if (!prop.CanWrite) continue;
                                if (ordinals.ContainsKey(prop.Name))
                                {
                                    object value = reader.GetValue(ordinals[prop.Name]);
                                    if (value != DBNull.Value)
                                    {
                                        // 轉(zhuǎn)換為屬性的實(shí)際類型后賦值
                                        Type targetType = Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType;
                                        object safeValue = Convert.ChangeType(value, targetType);
                                        prop.SetValue(obj, safeValue);
                                    }
                                }
                            }
                            list.Add(obj);
                        }
                        reader.Close();
                    }
                }
                conn.Close();
            }
            return (true, list, null);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
            return (false, null, ex.Message);
        }
    }
}

運(yùn)行項(xiàng)目,你會發(fā)現(xiàn)項(xiàng)目依然報(bào)錯(cuò):

翻譯成中文:此軟件包不支持 Any CPU 版本

也就是說,生成的時(shí)候,不能使用 Any CPU

點(diǎn)擊項(xiàng)目的 配置管理器

在 “活動解決方案平臺” 這里展開下拉框,點(diǎn)擊新建

選擇一個(gè)平臺,復(fù)制設(shè)置我選擇空(最好不要和我圖片一樣,我這里是測試項(xiàng)目),然后點(diǎn)擊確定。關(guān)閉這個(gè)窗體。

然后在 運(yùn)行這里就能看到 x64 的選項(xiàng)了

選擇 x64,現(xiàn)在 Sqite 能正常的運(yùn)行了

如果你不想使用 x64 ,想刪除這個(gè)選項(xiàng),也很簡單,同樣是點(diǎn)擊配置管理器

找到活動解決方案平臺

點(diǎn)擊編輯

然后選中 x64,然后點(diǎn)擊移除就行了

end

到此這篇關(guān)于解決Sqlite“無法加載 DLL“e_sqlite3”: 找不到指定的模塊”的文章就介紹到這了,更多相關(guān)Sqlite 無法加載 DLL“e_sqlite3”: 找不到指定的模塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SQLite3 安裝、基本操作使用示例

    SQLite3 安裝、基本操作使用示例

    本文介紹了SQLite3的安裝方法(含可選工具包和圖形界面)及基本操作,包括數(shù)據(jù)庫創(chuàng)建、表結(jié)構(gòu)定義、數(shù)據(jù)增刪改查和刪除數(shù)據(jù)庫文件的技巧,同時(shí)概述了其輕量、嵌入式、跨平臺、ACID事務(wù)等核心特性,感興趣的朋友跟隨小編一起看看吧
    2025-06-06
  • SQLite數(shù)據(jù)庫安裝及基本操作指南

    SQLite數(shù)據(jù)庫安裝及基本操作指南

    SQLite 是一個(gè)開源的嵌入式關(guān)系數(shù)據(jù)庫,實(shí)現(xiàn)自包容、零配置、支持事務(wù)的SQL數(shù)據(jù)庫引擎。 其特點(diǎn)是高度便攜、使用方便、結(jié)構(gòu)緊湊、高效、可靠。今天我們主要來講解下SQLite數(shù)據(jù)庫的安裝以及基本操作指南
    2014-08-08
  • sqlite時(shí)間戳轉(zhuǎn)時(shí)間語句(時(shí)間轉(zhuǎn)時(shí)間戳)

    sqlite時(shí)間戳轉(zhuǎn)時(shí)間語句(時(shí)間轉(zhuǎn)時(shí)間戳)

    這篇文章主要介紹了sqlite時(shí)間戳轉(zhuǎn)時(shí)間、時(shí)間轉(zhuǎn)時(shí)間戳的方法,需要的朋友可以參考下
    2014-06-06
  • SQLite高手晉級教程:調(diào)試與性能優(yōu)化以及常見問題

    SQLite高手晉級教程:調(diào)試與性能優(yōu)化以及常見問題

    SQLite 是一個(gè)輕量級的數(shù)據(jù)庫,廣泛用于各種應(yīng)用中,包括移動應(yīng)用和嵌入式系統(tǒng),盡管它非常靈活和強(qiáng)大,但在處理大規(guī)模數(shù)據(jù)或高并發(fā)請求時(shí),性能優(yōu)化變得非常重要,本篇文章將重點(diǎn)講解 SQLite 的調(diào)試工具和性能優(yōu)化技巧,以幫助您解決常見問題并進(jìn)一步提升數(shù)據(jù)庫性能
    2025-03-03
  • 保護(hù)你的Sqlite數(shù)據(jù)庫(SQLite數(shù)據(jù)庫安全秘籍)

    保護(hù)你的Sqlite數(shù)據(jù)庫(SQLite數(shù)據(jù)庫安全秘籍)

    相信使用PHP開發(fā)的人員一定不會對SQLite感到陌生了,PHP5已經(jīng)集成了這個(gè)輕量型的數(shù)據(jù)庫。并且很多虛擬主機(jī)無論是win還是*nux都支持它。
    2011-08-08
  • VScode第三方插件打開sqlite數(shù)據(jù)庫圖文教程

    VScode第三方插件打開sqlite數(shù)據(jù)庫圖文教程

    在實(shí)際做一個(gè)項(xiàng)目的時(shí)候,為了提高效率我們會首選不重復(fù)造輪子,所以可能會用到第三方庫,下面這篇文章主要給大家介紹了關(guān)于VScode第三方插件打開sqlite數(shù)據(jù)庫的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • SQLite教程(十三):C語言編程實(shí)例代碼(1)

    SQLite教程(十三):C語言編程實(shí)例代碼(1)

    這篇文章主要介紹了SQLite教程(十三):C語言編程實(shí)例代碼(1),本文講解了獲取表的Schema信息、動態(tài)創(chuàng)建表、刪除該表、常規(guī)數(shù)據(jù)插入、創(chuàng)建測試數(shù)據(jù)表、刪除測試表等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • SQLite教程(二):C/C++接口簡介

    SQLite教程(二):C/C++接口簡介

    這篇文章主要介紹了SQLite教程(二):C/C++接口簡介,本文講解了C/C++接口概述、核心對象和接口、參數(shù)綁定等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • sqlite3 命令行工具使用指南

    sqlite3 命令行工具使用指南

    本文系統(tǒng)介紹sqlite3 CLI的啟動、數(shù)據(jù)庫操作、元數(shù)據(jù)查詢、數(shù)據(jù)導(dǎo)入導(dǎo)出及輸出格式化命令,涵蓋文件管理、備份恢復(fù)、性能統(tǒng)計(jì)等實(shí)用功能,并說明命令分類、SQL語法和資源限制,助力高效數(shù)據(jù)庫管理,對sqlite3 命令行工具相關(guān)知識感興趣的朋友一起看看吧
    2025-06-06
  • SQLite教程(十四):C語言編程實(shí)例代碼(2)

    SQLite教程(十四):C語言編程實(shí)例代碼(2)

    這篇文章主要介紹了SQLite教程(十四):C語言編程實(shí)例代碼(2),本文講解了高效的批量數(shù)據(jù)插入和數(shù)據(jù)查詢代碼實(shí)例,需要的朋友可以參考下
    2015-05-05

最新評論

吉木萨尔县| 龙门县| 镇江市| 高雄县| 冕宁县| 清流县| 阿坝县| 通河县| 长寿区| 洛隆县| 漠河县| 文成县| 岳池县| 芦山县| 门源| 平泉县| 肇州县| 陈巴尔虎旗| 罗定市| 金川县| 响水县| 宁阳县| 玉溪市| 天峨县| 儋州市| 靖宇县| 苏尼特右旗| 永嘉县| 朝阳区| 汉寿县| 通海县| 西吉县| 新安县| 尼玛县| 江山市| 高陵县| 成武县| 平远县| 肥西县| 樟树市| 万山特区|