之所以要做这个笔记,是因为在.NET中使用System.Data.SQLite的时候,遇到了些问题,这些问题是相对于引用其他dll没有遇到过的,所以作个笔记,记录一下。

简单起见,首先建立一个控制台项目,这肯定是.NET4.5以上的版本了,我用的是vs2017,其他版本的vs在引用System.Data.SQLite的时候有没有问题,这个就不得而知了。

首先还是按照以往使用第三方dll文件(指是在引用管理器中搜索不到的dll)的思路,在项目文件夹下面建立一个文件夹dll,将System.Data.SQLite.dll放进去(前提是保证下载的dll是正确的版本),然后

在项目中添加这个dll的引用。然后在项目的main函数中粘贴以下代码,这里只是为了能正常使用SQLite,所以代码设计的比较简单,当然代码也是网上找的

  1. SQLiteConnection conn = null;
  2.  
  3. string dbPath = "Data Source =" + Environment.CurrentDirectory + "/test.db";
  4. conn = new SQLiteConnection(dbPath);//创建数据库实例,指定文件位置
  5. conn.Open();//打开数据库,若文件不存在会自动创建
  6.  
  7. string sql = "CREATE TABLE IF NOT EXISTS student(id integer, name varchar(20), sex varchar(2));";//建表语句
  8. SQLiteCommand cmdCreateTable = new SQLiteCommand(sql, conn);
  9. cmdCreateTable.ExecuteNonQuery();//如果表不存在,创建数据表
  10.  
  11. SQLiteCommand cmdInsert = new SQLiteCommand(conn);
  12. cmdInsert.CommandText = "INSERT INTO student VALUES(1, '小红', '男')";//插入几条数据
  13. cmdInsert.ExecuteNonQuery();
  14. cmdInsert.CommandText = "INSERT INTO student VALUES(2, '小李', '女')";
  15. cmdInsert.ExecuteNonQuery();
  16. cmdInsert.CommandText = "INSERT INTO student VALUES(3, '小明', '男')";
  17. cmdInsert.ExecuteNonQuery();
  18.  
  19. conn.Close();

然后开始跑程序,出现了第一个问题:异常来自 HRESULT:0x8007000B

网上搜索了一下解决方案,都说的是将项目属性里面的生成里面的平台目标改成x86或x64。再啰嗦一句,我的电脑系统是Windows server 2012 r2 标准版,妥妥的64位操作系统。

这里我选择的是x86,然后继续跑程序,结果还是出现刚才的问题。然后选择x64,跑程序。好了,这回出现新问题了:异常来自 HRESULT:0x8007007E

根据提示,说是没有SQLite.Interop.dll文件,于是将这个文件复制到刚才建立的dll文件夹中,并引进项目,结果又出问题了。不就是引用个第三方的dll文件吗,有必要出现那么多问题吗,内心已经很崩溃。

这个问题,我确实没办法了,网上也找不到合适的解决方案(主要是有些解决办法太麻烦,看都懒得看了)。怎么办呢,遇到问题总要解决吧,作为一个专业的程序员,码农,遇到问题必须有探索的精神,

不能指望领导,不能指望同事,想想自己还没赚到足够的钱,娶到白富美,走上人生的巅峰,想想家里的父母.......开始胡思乱想了。想着想着,无意中打开了项目的bin文件夹里面的Debug文件夹,哎哟我

去,发现了新大陆了,这个dll怎么出现在这里,我明明是放在dll文件夹里面的。再想到刚才的错误不是说没有SQLite.Interop.dll文件吗,那我把SQLite.Interop.dll文件也放到这里看看

再跑程序,哎哟我去,奇迹出现了,程序跑起来了,成功了,debug文件夹下,出现了test.db文件了,这不就是梦中情人白富美吗,总算出现了。

为了验证一下是否真的把数据写进去了,我简单些了个查询函数看了一下,果然没问题

总结:1、下载正确版本的SQLite,主要是32位还是64位

    2、将SQLite.Interop.dll和System.Data.SQLite.dll放到bin文件夹的debug文件夹下,然后只需引用System.Data.SQLite.dll就好

       3、将项目属性里面的生成里面的平台目标改成x64,当然这是因为我电脑是64位的,如果是32位电脑也许不用这步操作了。

一般来说,这样的对数据库的操作的代码,都是写在类库里面的,这里就有个地方需要注意了,在编写对SQLite使用的类库的时候,在类库中只需引用System.Data.SQLite.dll,文件放在什么地方无所谓,

只要能引用就行,然后编译通过后,在引用这个类库的项目里面,记得将SQLite.Interop.dll放到bin文件夹下面的debug文件夹,而且引用的项目的属性里面的平台目标记得改成x64。而类库没有这个要求。

.net引用System.Data.SQLite操作SQLite的更多相关文章

  1. C#使用System.Data.SQLite操作SQLite

    使用System.Data.SQLite 下载地址:http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki 得到Sy ...

  2. System.Data.OleDb操作access数据库类,【bubuko.com】

    access数据库在应用了System.Data.OleDb后操作会很方便,这是一个常用的数据库操作类,其中两个方法,一个是返回datatable的,一个是执行sql语句返回影响记录的(一般是inse ...

  3. C#------引用System.Data.Entity后DbContext依然无法继承解决方法

    解决方法: 需要在“引用”->“管理NuGet程序包”里面添加->“EntityFramework.dll”文件即可

  4. 【转】VS2010不能引用System.Data.OracleClient解决方法

    源地址:http://blog.csdn.net/iloli/article/details/8484674

  5. 解决System.Data.SQLite兼容32位和64位问题

    将当前说明文档的目录下的x64.x86目录和System.Data.SQLite.dll文件复制到您的应用程序根目录中(注意更新引用,引用System.Data.SQLite.dll即可,两目录中的不 ...

  6. System.Data.SQLite兼容32位和64位问题

    SQLite版本分的很详细,本机是64位在32位会出现问题,经过搜索找到解决方案. 这是我以前写的32位在我现在的机子上的运行报错. 类似这样的. 将当前说明文档的目录下的x64.x86目录和Syst ...

  7. 手把手教你使用C#操作SQLite数据库,新建数据库,创建表,插入,查询,删除,运算符,like

    目录: 一.新建项目,添加引用 二.创建数据库 三.创建表 四.插入数据  五.查询数据  六.删除数据  七.运算符 八.like语句 我的环境配置:windows 64,VS,SQLite(点击下 ...

  8. C#操作Sqlite快速入门及相关工具收集

    Sqlite不需要安装即可使用.Sqlite是不是那个System.Data.SQLite.DLL临时创建了数据库引擎? 1.新建一个WinForm项目,引用System.Data.SQLite.DL ...

  9. c#操作sqlite db3数据库

    首先添加引用 System.Data.SQLite.dll,引用只用添加这个,但SQLite.Interop.dll文件必须也和它同时放在Debug目录下 然后可用: SQLiteConnection ...

随机推荐

  1. codeforces Gym 100971 A、B、C、F、G、K、L

    A题  直接把问号全部变为陆地如果所有陆地连通    那么再逐个把刚才变成陆地的问号变为水如果依旧连通有多种解 为什么我的代码跑不过去,和网上的题解思路一模一样!!?? #include<cst ...

  2. Ubuntu 16.04无法在WPS中输入中文的问题解决

    1. sudo gedit /usr/bin/wps 增加 export XMODIFIERS="@im=fcitx" export QT_IM_MODULE="fcit ...

  3. AndroidStudio NDK开发、调试测试工程

    ## 验证内容:1.支持NDK调试 2.支持native方法快速创建jni封装(但是没有加入extern "C"声明,会导致native方法找不到jni,进而报错) 3.支持通过修 ...

  4. delphi调用oracle存储过程(ODAC)

    CREATE OR REPLACE PACKAGE p_lee01ISTYPE cur_lee01 IS REF CURSOR;END; CREATE OR REPLACE PROCEDURE pro ...

  5. &quot;Simple Factory&quot; vs &quot;Factory Method&quot; vs &quot;Abstract Factory&quot; vs &quot;Reflect&quot;

    ref: http://www.cnblogs.com/zhangchenliang/p/3700820.html 1. "Simple Factory" package torv ...

  6. (十)Net Core项目使用Cookies (八)Net Core项目使用Controller之三-入参

    (十)Net Core项目使用Cookies 一.简介 1.Net Core可以直接使用Cookies,但是调用方式有些区别. 2.Net Core将Request和Response分开实现. 二.基 ...

  7. Eclipse插件开发中的选择监听机制(Selection Provider-Listener)

    Eclipse插件开发中的选择监听机制(Selection Provider-Listener) 监听机制是eclipse插件开发或rcp应用开发中经常使用的技术,比方点击TableViewer或Tr ...

  8. C语言之函数调用17—递归法之中的一个般函数的调用(2)

    //递归法 /* ================================================================== 题目:求F(60),当中F(n)定义例如以下: ...

  9. SSH-struts2的异常处理

    在学习j2se的时候学习过利用java的exception类去处理异常.在struts2框架中也提供了对于异常的处理.简单说就是当Action发生异常时.能够在struts2.xml文件里进行配置,将 ...

  10. 为axure生成的html站点添加关闭所有节点的功能

    上一篇随笔:将Axure用于需求分析工具中,我分享了我做了一个axure部件,方便用axure中制作各种uml图. 用axure的朋友可能会发现一个问题,如下图,axure生成的html站点中所有的文 ...