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-13 08:00:31

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

解决安装Office2013时提示“该程序包安装失败”

解决安装 Office2013 时提示"该程序包安装失败",如果你在使用了 Ramdisk,并修改了TEMP临时文件夹的变量路径,那么安装Office2013时就会提示"该程序包安装失败". 主要 Ramdisk 分配的容量不够解压Office2013. 解决方法:把TEMP临时文件夹的变量路径修改回默认就可以解决啦.安装完毕后建议重新修改TEMP临时文件夹到Ramdisk.

如何把java swing 应用程序做成安装好后在桌面上有一个快捷键

问题描述 我有一个javaswing开发的项目,想把它做成像c++,c#一样的安装过程,并且在桌面上有一个快捷键.这种效果有点类似QQ的安装程序,当安装成功后,就会在桌面有一个快捷键.请知道的大侠们告诉我下.非常感谢!! 解决方案 解决方案二:你做安装程序的时候,做个快捷方式在桌面,解决方案三:能详细点吗?非常感谢!解决方案四:使用izpack打包的话.看文档解决方案五:NullSoft有一个安装程序制作工作,以前Winamp就是用它做的.虽然简单,但免费.解决方案六:找个打包工具就可以了.解决

管理NuGet程序包

问题描述 找不到与"Microsoft.Net.Http2.2.29"兼容的"Microsoft.Net.Http.zh-Hans"版本求解 解决方案 解决方案二:你这个中彩了?解决方案三:几个意思~~

阿里云 ssl证书手把手教程 及nginx文件配置 安装完成后出现下载弹出窗问题的解决

1.登录阿里云-->产品与服务->安全(云盾)-->CA证书服务 2.点击购买证书 3.选择免费型 4.0元支付后,点击证书控制台进入 5.补全信息 6.填写自己的域名 7.进一步补全信息,记得勾选红色标记,最后提交审核 8.10多分钟后审核就能通过,点击刚才提交的那条信息点击下载证书,然后解压得到两个文件,不要去修改他们 9.登陆到自己的服务器目录,在nginx/conf目录下新建cert目录并修改权限为775,将刚才解压的两个文件上传到cert目录下 10.配置conf文件,在ngi

安装和加载R程序包

安装和加载R程序包 目前已有很多精心设计.维护良好且广泛支持的与机器学习相关的R程序包.在我们要进行的案例研究中,涉及的程序包主要用于:处理空间数据.进行文本分析.分析网络拓扑等,还有些程序包用于与网络API进行交互,当然还有其他很多功能,不胜枚举.因此,我们的任务很大程度上会依赖内置在这些程序包的函数功能. 加载R程序包很简单.实现加载的两个函数是:library和require.两者之间存在细微差别,在本书中,主要差别是:后者会返回一个布尔值(TRUE或FALSE)来表示是否加载成功.例如,

利用rpm包安装、配置及卸载mysql的详细过程.

利用rpm包安装.配置及卸载mysql教程的详细过程. 通过rpm包安装.配置及卸载mysql的详细过程. 以MySQL-server-4.0.14-0.i386.rpm为例,放在/data目录下 cd /data rpm -ivh MySQL-server-4.0.14-0.i386.rpm 安装完成后在/usr/share/mysql目录中会有一个mysql的启动脚本mysql.server及示例配置文件等(如my-huge.cnf.my-large.cnf.my-medium.cnf) 拷

用VS2005打包,如何让主程序在安装完成后自动启动

问题描述 用VS2005打包,如何让主程序在安装完成后自动启动 解决方案 解决方案二:刚刚注册,这是仅有的40分.哈...解决方案三:添加一个新项目,项目类型为类库,然后在这个项目中添加一个安装程序类.添加类似下面的代码:usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Configuration.Install;namespaceCustomSetup{[RunInstaller(true)]publi

VS2013 安装程序包后覆盖原项目文件如何恢复??

问题描述 安装以下程序包后原项目文件被覆盖Install-PackageSendGridInstall-Package-PrereleaseMicrosoft.AspNet.Identity.Samples请问能不能恢复? 解决方案 解决方案二:被覆盖一般就很难找到了,重要的文件一定要多重备份(U盘一份.移动硬盘一份.网盘一份等等).解决方案三:nuget吗?试试uninstall指令解决方案四:这些是系统的库,不是你的,重新下载就是了.解决方案五:覆盖还不如删除呢,删除最起码回收站里面还有可能

app-APP签名后安装报错“解析程序包时出现错误”

问题描述 APP签名后安装报错"解析程序包时出现错误" 今天升级应用时,被告之签名发生变化--要知道我根本没有做过相关的任何操作,即使有签名也一定是MyEclipse帮我做的,而我对此一无所知.在网上查了一下,感觉还是有很多问题没有答案,所以问一下: 1.我之前生成的应用,发布了,现在我的笔记本换了,各应用包括Java.SDK.ADT等也换了.只有SDK和ADT.所有源码有备份,不知道还是否可以得到原应用文件的相关签名文件,包括如果存在的密钥或密码? 2.如果还有办法得到,应该也有办法