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 = ;
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而需要注意的地方,而非这种情况请另寻他法。
NuGet程序包安装SQLite后完全抽离出SQLite之入门介绍及注意事项,你真的懂了吗?的更多相关文章
- 这台计算机上缺少此项目引用的Nuget程序包,请参考链接 不给出缺什么包的提示。
这台计算机上缺少此项目引用的Nuget程序包,请参考链接 不给出缺什么包的提示. 解决办法: 1.卸载当前解决类库. 2.编辑当前项目类库文件. 3.删除节点 <Target Name=&q ...
- VS2013中Nuget程序包管理器控制台使用入门(二)-如何使用Nuget提供的帮助(原创)
如何使用Nuget提供的帮助? 1.从get-help Nuget开始,键入“get-help NuGet”以查看所有可用的 NuGet 命令. 用法: PM> get-help Nuget 主 ...
- ORM之PetaPoco错误--VS中NUGet程序包管理安装PetaPoco
一般在Vs中使用PetaPoco的时候都是使用NuGet程序包管理来安装PetaPoco的,如果你在安装PetaPoco前设置了ConnectionString,那么PetaPoco中的T4模板会自动 ...
- VS2012 安装 NPOI (管理NuGet程序包)
问题背景 选择项目后右键==>管理NuGet程序包,搜索NPOI,返回服务器无法找到...404 解决方法: 第一步: 访问:https://www.nuget.org/api/v2/ ...
- VS2010使用NuGet程序包管理器
使用C#过程中经常需要使用一些扩展包,例如sqlite,json解析等. VS2010自带了一个扩展管理器,里面可以下载到AStyle,Visual Assit等有用的插件. VS2010中点击[工具 ...
- 用命令行工具创建 NuGet 程序包
NuGet.exe 下载地址 本文翻译自: https://docs.nuget.org/Create/Creating-and-Publishing-a-Package https://docs.n ...
- 解决C#项目出现“此项目引用这台计算机上缺少的 NuGet 程序包。使用 NuGet 程序包还原可下载这些程序包。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 ..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props”
1.打开项目的.csproj文件 2.删掉如下选中的内容: 3.右键项目-->管理NuGet程序包(N) 找到Microsoft.CodeDom.Providers.DotNetCompiler ...
- 管理nuget程序包中搜索不到任何程序包
之前一直使用vs2012开发,管理nuget程序包没有出现过什么问题.因为开发需要,需要使用vs2015,安装vs2015后再使用vs2012时,发现管理nuget程序包中搜索不到任何资源,晕死. 想 ...
- 这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包
将项目复制到其地方的时候编译会报错,按照官网方法也不行,从网上查了一个有用的方法如下 打开CSPROJ文件.删除如下代码, <Import Project="..\packages\ ...
随机推荐
- 【BZOJ2442】 [Usaco2011 Open]修剪草坪 斜率优化DP
第一次斜率优化. 大致有两种思路: 1.f[i]表示第i个不选的最优情况(最小损失和)f[i]=f[j]+e[i] 显然n^2会T,但是可以发现f的移动情况可以用之前单调队列优化,就优化成O(n)的了 ...
- 【总结】C# Access 数据库 增删查改 的简单步骤
引用集: using System.Data.OleDb; static string exePath = System.Environment.CurrentDirectory;//本程序所 ...
- C++ 类对象和 指针的区别
C++ 类对象和 指针的区别 C++ 类对象和 指针的区别 转自:http://blog.csdn.net/ym19860303/article/details/8557746 指针的情况 class ...
- Altium Designer之AD16在Win10系统下无法切换走线/布线模式的解决办法
有些童鞋会在Win10下使用AD16的时候发现,走线模式/布线模式(切换直角,45°,弧形等)不能切换. 问题出在输入法上,一般是切换到英文输入法即可解决,但是有一种情况是win10系统自带输入法有时 ...
- Think in 递归
网上写递归的文章可以用汗牛充栋来形容了,大多数都非常清晰而又细致的角度上讲解了递归的概念,原理等等.以前学生的时候,递归可以说一直是我的某种死穴,原理,细节我都懂,但是不管是在如何运用或者如何试试算法 ...
- console对象-转
console对象 来自<JavaScript 标准参考教程(alpha)>,by 阮一峰 目录 开发者工具 console对象 console.log() console.debug() ...
- 防御sql注入
1. 领域驱动安全 领域驱动安全是一种代码设计方法.其思想是将一个隐式的概念转化为显示,个人认为即是面向对象的方法,将一个概念抽象成一个类,在该类中通过方法对类的属性进行约束.是否是字符串,包含什么字 ...
- Linux上传下载文件快捷命令
远程链接Linux(如SecrueCRT),要上传文件很下载文件到Linux服务器,只需要使用sz或者rz命令即可快速下载和上传文件了. 使用方法: 1.首先确保Linux服务器系统中安装了lrzsz ...
- QSort函数对不同类型数据快速排序浅谈
一.对int类型数组排序 int num[100]; int cmp ( const void *a , const void *b ){return *(int *)a - *(int *)b;} ...
- C#与Java对比学习:数据类型、集合类、栈与队列、迭达、可变参数、枚举
数据类型: C#:String与StringBuilder Java:String与StringBuffer 第一个不习惯是string的第一个字母必须大写了. 第二个不习惯是int得写成Intege ...