NuGet程序包安装SQLite后完全抽离出SQLite之入门介绍及注意事项,你真的懂了吗?

简介:

前言

近几天的几篇文章讲的内容非前面内容如系列的讲解,这几天文章都是我在项目中遇到的问题以及重新学习的知识,所以和大家分享一下,关于SQLite的文章多如牛毛,但是有些大多已经过时,为什么说过时,之前都是在SQLite官网中下载dll或者exe来实现,现如今我们可以直接安装SQLite程序包,又方便了我们,同时作者对于SQLite也没用过,这也是项目需要才去学习SQLite的使用,欢迎和大家一起探讨。

安装SQLite

通过NUGet来安装SQlite程序包,如下:

此时自然而然在包中会有如下SQLite、SQLiteCore、SQLiteEF等程序集

 接着就是写我们的SQLite语句了,简直是so easy!在学习当中我们可以这样玩玩,仅仅是玩玩而已,在实际项目中,难道我们把这些程序集就直接扔在pacakages中吗,肯定不是这样,我们仅仅只需要其中的程序集即可。关于使用SQLite必须要用【 System.Data.SQLite.dll 】和【 SQLite.Interop.dll 】就不再叙述了,其他EF和Linq的程序集都是为了配合EF而用,我们根据项目情况而定可要可不要,这里我们没有添加。我们删除了包中这几个程序集同时为了防止重新生成解决方案时NuGet在包配置 【packages.config】 检测到缺少而重新安装,我们在包配置中将这几个进行删除。此时我们再来生成解决方案则出错如下:

根据经验来看,一般来说如果是对项目进行命名或者进行其他修改生成解决方案而出错,八九不离十是对其修改的内容修改成功但是在项目中以扩展名为【 csproj 】的项目主文件未进行对应的修改而造成,我们去找找看。

我们看到当生成解决方案时会重新加载该文件,该文件会导入SQLite但是此时我们已经删除则会出现下面的错误,此时我们将其导入和错误内容进行删除即可生成解决方案成功。我们将程序集进行如下放置:

(1)非空MVC项目 

我们来写一个向SQLite数据库中插入的语句,我们准备好插入的SQLite语句:

复制代码
        /// <summary>  
        /// 对SQLite数据库执行增删改操作,返回受影响的行数。  
        /// </summary>  
        /// <param name="sql">要执行的增删改的SQL语句</param>  
        /// <param name="parameters">执行增删改语句所需要的参数,参数必须以它们在SQL语句中的顺序为准</param>  
        /// <returns></returns>  
        public static int ExecuteNonQuery(string sql)
        {
            int affectedRows = 0;
            if (IsDBInitialized())
            {
                try
                {
                    using (SQLiteConnection connection = new SQLiteConnection(s_ConnectionString))
                    {
                        connection.Open();
                        using (DbTransaction transaction = connection.BeginTransaction())
                        {
                            using (SQLiteCommand command = new SQLiteCommand(connection))
                            {

                                command.CommandText = sql;
                                affectedRows = command.ExecuteNonQuery();
                            }
                            transaction.Commit();
                        }
                    }
                }
                catch (Exception ex)
                {

                }
            }
            return affectedRows;
        }
复制代码

我们给出插入测试语句:

SQLiteHelper.ExecuteNonQuery("insert into Test(Id,TestValue) values(1,2)");

我们来看看演示结果:

结果如我们所期望那样,请记住这样演示的前提是我们建立的项目是【非空MVC项目即基础MVC项目】,同时将【SQLite.Interop.dll】和【System.Data.SQLite.dll】程序集放在同一文件夹中同样好使。

(2)空MVC项目且SQLite位于同一项目中

 此时我们来演示第二种情况,我们建立一个空的MVC项目将上述两个SQLite程序集放在同一文件夹下我们来插入数据试试。

结果出现如下错误:

此时我们将【SQLite.Interop.dll】放在x86或者x64文件夹中根据自身操作系统来取这个程序集。看下演示结果:

此时如上存放【SQLite.Interop.dll】程序集则成功,我们再来看看能否将x64或者x86取名为任何其他名字:

 如上我们将存放【SQLite.Interop.dll】程序集的名字修改为test此时则依然出错找不到入口点。从这里可以看出存放【SQLite.Interop.dll】程序集文件夹名字要么是x86或者x64。好了,到了这里是不是就完了呢,还没有,我们一直演示的是将SQLite放在一个项目中,要是将其作为另外的一个项目又是怎样的情况呢?我们来看看。

(3)空MVC项目但SQLite位于另外一个项目中

关于将【SQLite.Interop.dll】和【System.Data.SQLite.dll】放在同一文件夹中则不再演示,很明显在同一项目中都不好使,何况是在另外一个项目中呢,我们来看看放在另外一个项目中的结构:

如上我们和上述空MVC项目正确情况一样放置,我们来看看结果:

令我们大跌眼镜,将SQLite单独放在一个项目中则出错了,此时我们将【SQLite.Interop.dll】程序集属性【复制到输出目录】设置为【始终复制】看看,我们再来看看演示结果:

 

好了到了这里才完全结束,这几种情况你懵逼了还是弄懂了。

总结

(1)关于建立非空MVC项目在里面建立SQLite你爱怎么玩就怎么玩,不过是学习而已,猜测大概是MVC内置做了处理。

(2)关于建立空MVC项目在里面建立SQLite,不能将【SQLite.Interop.dll】和【System.Data.SQLite.dll】放在同一文件夹中,需要将【SQLite.Interop.dll】程序集放在x86或者x64文件夹中且文件夹名字不能更改。

(3)关于建立的空MVC项目但将SQLite单独建立成一个项目时,将【SQLite.Interop.dll】和【System.Data.SQLite.dll】不能放在同一文件夹,需要将【SQLite.Interop.dll】放在x86或者x64文件夹中且文件夹名字不能更改的同时需要将【SQLite.Interop.dll】的属性【复制到输出目录】设置为【始终复制】。

 以上的种种注意都是通过NuGet安装的最新SQLite而需要注意的地方,而非这种情况请另寻他法。





本文转自Jeffcky博客园博客,原文链接:http://www.cnblogs.com/CreateMyself/p/5830650.html,如需转载请自行联系原作者

目录
相关文章
|
9月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
1033 7
|
缓存 Linux 调度
【YashanDB数据库】VMware虚拟机使用默认安装,在掉电之后数据库无法启动
VMware虚拟机使用默认安装,在掉电之后数据库无法启动
|
10月前
|
Ubuntu 安全 关系型数据库
安装与配置MySQL 8 on Ubuntu,包括权限授予、数据库备份及远程连接指南
以上步骤提供了在Ubuntu上从头开始设置、配置、授权、备份及恢复一个基础但完整的MySQL环境所需知识点。
1133 7
|
10月前
|
存储 数据库 开发者
Python SQLite模块:轻量级数据库的实战指南
本文深入讲解Python内置sqlite3模块的实战应用,涵盖数据库连接、CRUD操作、事务管理、性能优化及高级特性,结合完整案例,助你快速掌握SQLite在小型项目中的高效使用,是Python开发者必备的轻量级数据库指南。
833 0
|
Ubuntu 关系型数据库 Linux
Linux数据库安装
本文介绍了在CentOS 8.0和Ubuntu 22.04系统上安装、配置和启动MariaDB数据库服务器的详细步骤。包括通过`yum`和`apt`包管理器安装MariaDB服务,启动并检查服务运行状态,设置root用户密码以及连接数据库的基本操作。此外,还展示了如何在Ubuntu上更新软件包列表、安装依赖项,并验证MariaDB的版本和运行状态。通过这些步骤,用户可以成功部署并初始化MariaDB环境,为后续数据库管理与应用开发奠定基础。
913 61
|
SQL 关系型数据库 MySQL
MySQL下载安装全攻略!小白也能轻松上手,从此数据库不再难搞!
这是一份详细的MySQL安装与配置教程,适合初学者快速上手。内容涵盖从下载到安装的每一步操作,包括选择版本、设置路径、配置端口及密码等。同时提供基础操作指南,如数据库管理、数据表增删改查、用户权限设置等。还介绍了备份恢复、图形化工具使用和性能优化技巧,帮助用户全面掌握MySQL的使用方法。附带常见问题解决方法,保姆级教学让你无忧入门!
1439 21
MySQL下载安装全攻略!小白也能轻松上手,从此数据库不再难搞!
|
存储 数据库连接 数据库
告别数据库瓶颈!用这个技巧让你的程序跑得飞快!
本文介绍了数据库连接池的概念及其在性能优化中的重要性,通过两个示例展示了如何管理 SQLite 数据库连接。首先,手动实现了一个基于 `sqlite3` 和 `queue.Queue` 的简单连接池,涵盖初始化、获取与释放连接的核心流程。接着,使用功能更强大的 `SQLAlchemy` 库创建连接池,简化了连接管理并支持更多高级特性。对比两种方式后发现,自定义连接池适合学习和小型应用,而 `SQLAlchemy` 更适用于复杂场景。合理使用连接池可显著提升高并发环境下的数据库操作效率。
244 1
|
SQL 数据库连接 数据库
在C++的QT框架中实现SQLite数据库的连接与操作
以上就是在C++的QT框架中实现SQLite数据库的连接与操作的基本步骤。这些步骤包括创建数据库连接、执行SQL命令、处理查询结果和关闭数据库连接。在实际使用中,你可能需要根据具体的需求来修改这些代码。
898 14
|
关系型数据库 MySQL 数据库
Docker Compose V2 安装常用数据库MySQL+Mongo
以上内容涵盖了使用 Docker Compose 安装和管理 MySQL 和 MongoDB 的详细步骤,希望对您有所帮助。
1401 42
|
监控 Java Shell
【YashanDB 知识库】ycm 托管数据库时,数据库非 OM 安装无法托管
本文主要介绍了因数据库未按规范使用 yasboot 安装导致的问题及解决方法。问题表现为无 yasom 和 yasagent 进程,且目录结构缺失,致使 ycm 无法托管与监控。分析发现可能是数据库版本旧或安装不规范引起。解决方法为先生成配置文件,安装 yasom 和 yasagent,再生成并修改托管配置模板,最终通过命令完成托管至 yasom 和 ycm。总结强调了按规范安装数据库的重要性以避免类似问题。

热门文章

最新文章