手机版

独立于VC运行时运行Sqlite的方法

时间:2021-09-10 来源:互联网 编辑:宝哥软件园 浏览:

目前,Sqlite用于手头的一个. NET项目中。这是我第一次接触和使用Sqlite,整体感觉很不错。在这里,我将与大家分享我使用Sqlite的经验。

一、关于Sqlite

Sqlite是一个适用于客户端和嵌入式设备的开源轻量级数据库,支持标准SQL。

与SqlServer或Oracle的引擎不同,后者是一个独立的进程,通过TCP或命名管道与程序通信,而Sqlite是程序的一个组件。使用SQLite的方法是在程序中直接调用API。

原来的Sqlite没有针对SqlServer Enterprise Manager的可视化操作程序,但是有一个第三方应用程序SqliteStudio,非常不错,很好的支持了构建数据库、表、编辑数据、导出数据等基本功能。SqliteStudio运行的截图如下:

Sqlite资源链接:

(1)Sqlite官网:可以从官网下载源代码,也可以下载编译后的二进制版本。支持的系统包括:Linux、MacOS、Windows、NET。

(2)SqliteStudio:一个简单易用的Sqlite可视化管理器。

二.在中使用Sqlite。网

下载的Sqlite。NET版本来自官网,主要包括两个dll:SQLite.Interop.dll和System.Data.SQLite.dll。

(1)System.Data.SQLite.dll是一个标准的托管dll,可以直接在中引用和使用。NET项目,就像使用系统中的每个对象一样。的数据命名空间。NET。

(2)Sqlite.Interop.dll是一个非托管dll,是SQLite引擎的核心。我们需要把它复制到运行目录中,在运行过程中会被System.Data.SQLite.dll调用。

3.让Sqlite脱离VC运行时

在项目开发后的测试中,我们发现使用Sqlite的客户端程序在一些机器上运行时会报错,如下图所示:

无法加载dll“SqLite”;互操作性;dll ';由于应用程序配置不正确,应用程序无法启动。重新安装应用程序可能会纠正此问题。(异常来自HRESULT:0x800736B1)

经过很多麻烦,发现这些机器上没有安装VC运行时(Visual C 2005 SP1运行时),SQLite.Interop.dll的运行需要VC运行时的支持。这太不友好了。我们的项目是基于。NET 2.0。windows xp sp1及以上都有这个Framework,但这些机器不一定安装了VC运行时。因此,我的第一反应是尝试让Sqlite在没有安装VC运行时的机器上正常运行。

1.备选方案1

我买了一段时间,好像有一个可行的方案:把msvcm80.dll、msvcp80.dll、msvcr80.dll的动态库放在运行目录里。我不太喜欢这个计划,所以我试图自己解决这个问题。

2.备选方案2

有了一点我还没有完全忘记的VC基础,我知道VC程序在编译时可以选择是动态链接到依赖库还是静态链接。如果是静态链接的,编译生成的二进制程序相当于包含一个依赖库的副本。因此,我的想法是重新编译SQLite.Interop.dll,使其静态链接到VC运行时。我下载了Sqlite的源代码,用VS2010打开。截图如下:

SQLite。Interop.2010是核心项目。我们需要稍微修改它的一些设置。我花了一些时间来探索这些小的修改,然后才成功。在这里,我将省略具体的探索过程,直接给出探索结果:

(1)打开SQLite。Interop.2010项目属性页,配置属性-C/C-代码生成-运行时库,设置为多线程调试(/MTd)。

(2)继续配置属性-盘点工具-输入输出-嵌入盘点。该项目已从“是”更改为“否”。

(3)显示所有项目文件,然后找到SQLite。Interop.2010.props文件并打开它。删除INTEROP_MIXED_NAME配置节点。

(4)从项目中删除“资源文件”文件夹。

(5)重新编译项目,生成的SQLite.Interop.dll就是我们需要的。

四.下载结果

除非你有特殊要求,否则不需要重复这个过程。我会直接提供生成的Sqlite二进制版本供你下载使用。

补充:Sqlite官网提供了静态连接库,是http://系统。数据。SQLite . org/downloads/1 . 0 . 93 . 0/SQLite-netfx20-static-binary-bundle-win32-2005-1 . 0 . 93 . 0 . zip。

版权声明:独立于VC运行时运行Sqlite的方法是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。