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而需要注意的地方,而非这种情况请另寻他法。

时间: 2024-11-04 13:27:03

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

这台计算机上缺少此项目引用的Nuget程序包,请参考链接 不给出缺什么包的提示。

这台计算机上缺少此项目引用的Nuget程序包,请参考链接   不给出缺什么包的提示. 解决办法: 1.卸载当前解决类库. 2.编辑当前项目类库文件. 3.删除节点 <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">...</Target>,重新加载解决方案即可. 原文地址:https://www.cnblogs.com/zl181015/

ORM之PetaPoco错误--VS中NUGet程序包管理安装PetaPoco

一般在Vs中使用PetaPoco的时候都是使用NuGet程序包管理来安装PetaPoco的,如果你在安装PetaPoco前设置了ConnectionString,那么PetaPoco中的T4模板会自动为你的数据库创建对应的类.PS:这是PetaPoco的优点,但是我个人还是喜欢手动创建类,不知道如何能够屏蔽这项功能. 但是T4模板为你创建类的时候,它自动生成的代码的命名空间是你ConnectionString的Name标签.那么问题来了,如果你的Name标签中的字符串是包含空格的,那么生成的命名

用命令行工具创建 NuGet 程序包

NuGet.exe 下载地址 本文翻译自: https://docs.nuget.org/Create/Creating-and-Publishing-a-Package https://docs.nuget.org/Create/Enforced-Package-Conventions 基本步骤 使用 nuget spec 命令生成 nuspec 文件 编辑 nuspec 文件,使用 nuget pack 命令打包 从程序集创建程序包 执行以下命令:生成  nuspec 文件: nuget s

这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包

将项目复制到其地方的时候编译会报错,按照官网方法也不行,从网上查了一个有用的方法如下 打开CSPROJ文件.删除如下代码,  <Import Project="..\packages\System.Data.SQLite.Core.1.0.109.2\build\net46\System.Data.SQLite.Core.targets" Condition="Exists('..\packages\System.Data.SQLite.Core.1.0.109.2\b

项目 XXX 的 NuGet 程序包还原失败:找不到“xxx”版本的程序包“xxx”

项目 XXX 的 NuGet 程序包还原失败:找不到“xxx”版本的程序包“xxx” 编译新下载的代码出错 修改包管理器的源为 http://www.nuget.org/api/v2/ .重试后成功 记得打勾

善用 NuGet 程序包管理器控制台

每种集成开发环境都会提供扩展包的下载与安装,VS (微软可视化集成开发环境) 下的叫程序包管理控制台,我们把他叫做<牛干 程序包管理控制台>. 在 工具=>NuGet 程序包管理器=> 程序包管理控制台,打开命令窗口. 这两条命令必学必会 PM> Install-Package 包 [-参数]PM> UnInstall-Package 包 [-参数] 参数可选(指定版本号或项目名) PM> Install-Package Microsoft.AspNet.Mvc

项目 Web 的 NuGet 程序包还原失败: 找不到“1.0.0”版本的程序包“Microsoft.Net.Compilers”。。 0

项目   Web 的 NuGet 程序包还原失败: 找不到“1.0.0”版本的程序包“Microsoft.Net.Compilers”.. 0 使用vs的NutGet包管理器时,另一台电脑从svn下载代码后出现的错误,修改包管理器的源为 http://www.nuget.org/api/v2/ .重试后成功

发布Nuget程序包

很多人在使用Visual Studio开发.NET项目时都使用过程序包管理器.通过程序包管理器,我们可以引用各种有价值的组件.如下图所示 那我们如何将自己的程序包发布到nuget上呢?今天我们就来了解一下整个流程. 创建类库 创建自己的类库,创建后的文件如下图所示 创建nuspec文件 在类库目录下运行nuget spec命令,生成.nuspec文件.然后修改文件中的id.authors.owners等. 创建nupkg文件 在类库目录下运行nuget pack .csproj -Prop Co

VS一直停留在“正在还原nuget程序包”

VS一直停留在“正在还原nuget程序包” 在开发何问起收藏夹的时候,准备在WinFrom中加入网页浏览器,于是下载了一个CEFSharp的源码,生成解决方案的时候,一直提示“正在还原nuget程序包”,在这个界面然后就不动了. 尝试在NuGet界面下载安装提示的程序包,还是等了很久也没有进展. 最后解决的办法是取消掉“允许NuGet下载缺少的程序包”,然后生产解决方案,就成功了. 设置的方法如下图: