前段时间在开发OrayTalk(傲瑞通企业即时通信系统)的聊天记录模块时用到了Sqlite,这是我第一次接触和使用Sqlite,整体感觉还是很不错的。这里把我使用Sqlite的经验跟大家分享一下。

一.关于Sqlite  

  Sqlite是一款开源的、适合在client和嵌入式设备中使用的轻量级数据库,支持标准的SQL。

  不像SqlServer或Oracle的引擎是一个独立的进程、通过TCP或命名管道等与程序进行通信,SQLite却是作为程序的一个部件、一个构成部分,使用Sqlite的方式就是直接在程序中进行API调用。

  原始的Sqlite是没有一个向SqlServer企业管理器的可视化操作程序的,可是有个第三方开发的应用SqliteStudio非常不错,主要的建库、建表、编辑数据、导出数据等功能都支持得非常好。SqliteStudio执行截图例如以下所看到的:

  

  Sqlite资源链接:

(1)Sqlite官网:能够从官网下载源代码、或下载已经编译好的二进制版本号。支持的系统包含:Linux、MacOS、Windows、.NET。

(2)SqliteStudio:好用的Sqlite可视化管理器。

二.在.NET中使用Sqlite

  从官网下载.NET版本号的Sqlite,其主要包含两个dll:SQLite.Interop.dll、System.Data.SQLite.dll。

(1)System.Data.SQLite.dll是一个标准的托管dll,我们能够直接在.NET项目中引用并使用它,就像使用.NET自带的System.Data命名空间中的各个对象一样。

(2)SQLite.Interop.dll是一个非托管的dll,是Sqlite引擎核心,我们须要将其复制到执行文件夹下,在执行时,它会被System.Data.SQLite.dll调用。

三.让Sqlite脱离VC++执行时

  我们在项目开发完成后測试的过程中发现,使用了Sqlite的client程序在某些机器上执行时会报错,例如以下所看到的:

  无法载入 DLL"SQLite.Interop.DLL";因为应用程序配置不对,应用程序未能启动。又一次安装应用程序可能会纠正这个问题。(异常来自 HRESULT:0x800736B1)

  经过一番折腾,才发现是这些机器上没有安装VC++执行时(Visual C++ 2005 SP1 runtime),而SQLite.Interop.dll的执行是须要VC++执行时支持的。这点太不友好了。我们的项目是基于.NET 2.0开发的,windows xp sp1 及以上版本号都自带了这个Framework,而这些机器不一定安装了VC++执行时。所以我第一反应就是,尝试让Sqlite在没有安装VC++执行时的机器上也能正常执行。

1.方案一

  我baidu了一下,有个似乎可行的方案是这种:将msvcm80.dll、msvcp80.dll、msvcr80.dll这几个动态库也放到执行文件夹下。这个方法我不太喜欢,于是我尝试自己动手解决这个问题。

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)从项目中移除“Resource Files”目录。

(5)又一次编译项目,生成的SQLite.Interop.dll便是我们所须要的。

四.下载成果

  除非特别需求,否则大家没有必要反复这一过程,我把生成的Sqlite二进制版本号直接提供给大家下载使用。

  能脱离VC++执行时执行的Sqlite (v1.0.93.0)  

让Sqlite脱离VC++ Runtime独立执行的更多相关文章

  1. 让Sqlite脱离VC++ Runtime独立运行

    前段时间在开发OrayTalk(傲瑞通)的聊天记录模块时用到了Sqlite,这是我第一次接触和使用Sqlite,总体感觉还是非常不错的.这里把我使用Sqlite的经验跟大家分享一下. 一.关于Sqli ...

  2. CodedUI自己主动化測试及脱离VS独立执行

    在VS中可创建"编码的UI測试".可录制软件操作,再回放,最后还能够脱离VS独立执行. 在VS中执行測试 创建项目codeuitest,控件布局.例如以下图: 在button单击事 ...

  3. 如何判断是否安装了VC RUNTIME

    先得说下GUID,它是Globally Unique Identifier的简称,中文翻译为“全球唯一标示符”,在Windows系统中也称之为Class ID,缩写为CLSID.对于不同的应用程序,文 ...

  4. windows环境下把Python代码打包成独立执行的exe

    windows环境下把Python代码打包成独立执行的exe可执行文件   有时候因为出差,突然急需处理一批数据.虽然写好的脚本存储在云端随用随取,然而编译的环境还需要重新搭建,模块也需要重新装载,从 ...

  5. windows环境下把Python代码打包成独立执行的exe可执行文件

    有时候因为出差,突然急需处理一批数据.虽然写好的脚本存储在云端随用随取,然而编译的环境还需要重新搭建,模块也需要重新装载,从头到尾这么一遍下来,也是要花费可观的时间成本的. 有没有什么办法,可以让.p ...

  6. Spring框架 JdbcTemplate类 @Junit单元测试,可以让方法独立执行 如:@Test

    package cn.zmh.PingCe; import org.junit.Test; import org.springframework.jdbc.core.BeanPropertyRowMa ...

  7. ADO方式,VC调用Execute执行INSERT INTO插入变量SQL语句的写法

    ADO方式,VC调用Execute执行INSERT INTO插入变量SQL语句的写法 有些情况下,SQL SERVER 2008r2中需要保存float,int类型的数据,当C 中的变量为double ...

  8. 如何解决 An error occured executing the Microsoft VC+runtime installer

    安装 postgresql 时遇见了 这个问题 There  has been an error.An error occured executing the Microsoft VC+ runtim ...

  9. 一种脱离VC编程软件的方法学习C/C++编程(搭建EditPlus实现在文本编辑框中执行.c文件

    网上下载一个EditPlus记事本安装好后就可以按照下面步骤进行搭建环境了: 一.工具(Tools)→配置用户工具(Configure UserTools...),[添加工具](Add Tool> ...

随机推荐

  1. Win7 补丁装不上怎么办?

    检查系统盘文件系统是否出错: 打开管理员命令行程序(Win+R,输入 cmd 确认) 如果系统盘是 C 盘,命令行窗口输入 chkdsk C: /f 对提示输入’y’ 重启等待 系统文件检查: 打开管 ...

  2. [原创].NET 分布式架构开发实战之二 草稿设计

    原文:[原创].NET 分布式架构开发实战之二 草稿设计 .NET 分布式架构开发实战之二 草稿设计 前言:本篇之所以称为草稿设计,是因为设计的都是在纸上完成的.反映了一个思考的过程. 本篇的议题如下 ...

  3. Unity3d 导入图像尺寸失真解决方案

    导入到unity3d内的图像被默认长宽变换为满足2^n关系. 例如以下图,我有张图片名称为984plus598表示我尺寸为984*598.拷贝到unity3d中后的大小为1024*512 方法一: 在 ...

  4. hdu 3081 hdu 3277 hdu 3416 Marriage Match II III IV //灵活运用最大流量

    3081 意甲冠军: n女生选择不吵架,他甚至男孩边(他的朋友也算.并为您收集过程).2二分图,一些副作用,有几个追求完美搭配(每场比赛没有重复的每一个点的比赛) 后.每次增广一单位,(一次完美匹配) ...

  5. 将odbc扩展编译至nodejs程序集中

    1. 下载nodejs https://github.com/joyent/node 2. 下载odbc for nodejs 扩展 https://registry.npmjs.org/odbc/- ...

  6. MapReduce 规划 系列的12 使用Hadoop Streaming技术集成newLISP文字

    本文example6环境与前Hadoop 1.x异,于Hadoop 2.x环境测试. 功能与前面相同的日志处理程序. 第一newLISP文字,游玩mapper任务.于stdin读取文本数据,将did由 ...

  7. 《Linux Device Drivers》第十四章 Linux 设备型号

    基本介绍 2.6内核设备模型来提供的抽象叙述性描述的一般系统的结构,为了支持各种不同的任务 电源管理和系统关机 用户空间与通信 热插拔设备 设备类型 kobject.kset和子系统 kobject是 ...

  8. Android 根据规划 Touch 分配和消费机制的事件

    Android 中与 Touch 事件相关的方法包含:dispatchTouchEvent(MotionEvent ev).onInterceptTouchEvent(MotionEvent ev). ...

  9. Struts2详细说明

    最近学习Struts2,阅读一些好的博客.收集有关. 原博文地址:http://blog.csdn.net/zz_mm/article/details/5460397 1.    深入Struts2的 ...

  10. poj 2482 Stars in Your Window(扫描线)

    id=2482" target="_blank" style="">题目链接:poj 2482 Stars in Your Window 题目大 ...