第一步

用SQLiteStudio生成一个新的数据库,sqlitetest,新建一张表test,建立一个主键字段ID,一个字符字段Name,建立完成,留待后用。

第二步

用VS2010建立一个sqlitetest的控制台程序,添加System.Data.SQLite和System.Data.SQLite.Linq引用(.Net版本的SQLite在http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki下载,目前版本1.0.87.0对应SQLite 3.7.17)

第三步

用CodeSmith正常生成项目,添加sqlitetest.Data、sqlitetest.Data.GenericClient和sqlitetest.Entities三个项目到程序中,并添加引用

问题1

这时编译会提示“命名空间“sqlitetest”中不存在类型或命名空间名称“Data”。是否缺少程序集引用?”,需要修改程序的目标框架从.NET Framework 4 Client Profile改成.NET Framework 4。

问题2

这时运行会抛出异常“Unable to load NetTiersServiceSection”,需要添加app.config文件,添加下面的内容到config文件的最前面

<configSections>
<section name="sqlitetest.Data"
type="sqlitetest.Data.Bases.NetTiersServiceSection, sqlitetest.Data"
allowDefinition="MachineToApplication"
restartOnExternalChanges="true" />
</configSections>

还有两段内容也需要复制到config文件中,具体见生成的report.html

问题3

这时运行会抛出异常“未能加载文件或程序集“sqlitetest.Data.SqlClient”或它的某一个依赖项。系统找不到指定的文件。”,因为之前生成的代码还是使用SqlClient,而不是产生的GenericClient

type="sqlitetest.Data.SqlClient.SqlNetTiersProvider, sqlitetest.Data.SqlClient"

上面这行改成

type="sqlitetest.Data.GenericClient.GenericNetTiersProvider, sqlitetest.Data.GenericClient"

——————————

providerInvariantName="System.Data.SqlClient"

上面这行改成

providerInvariantName="System.Data.SQLite"

问题4

这时运行会抛出异常“SQL logic error or missing database near ".": syntax error”,原因是生成的dbCommand类似这样:

INSERT INTO .[test]
(
[Name]
)
VALUES
(
@Name
);
注意表名前面有个".",费了点功夫去跟踪了下这个东东的来历,长话短说,这个东东来自于System.Data.SQLite.Procedures.cst,第70行:

string owner = GetOwnerName(SourceTable, true);
改成这样:
string owner = GetOwnerName(SourceTable);

重新生成即可

问题5

GenericTestProviderBase.generated.cs,第646行注释掉

entity.Id = (System.Int64) reader["test.ID"];

换用644行

entity.Id = (long)reader["Id"];

修改GenericEntityProviderBase.generated.cst,第1024行,去掉注释

entity.Id = (long)reader["Id"];
注释掉1038行

//entity.<%=GetPropertyName(cols[i])%> = (<%=castTo%>) reader["<%=cols[i]%>"];

问题6

System.Data.SQLite.Procedures.cst,第288行

tempParams += string.Format("AND [{1}] = @{0} {2}", prefix + GetPropertyName(SourceTable.PrimaryKey.MemberColumns[i]), SourceTable.PrimaryKey.MemberColumns[i], Environment.NewLine) ;

改为

tempParams += string.Format("AND [{1}] = @{0} {2}", prefix + GetPropertyName(SourceTable.PrimaryKey.MemberColumns[i]), SourceTable.PrimaryKey.MemberColumns[i].Name, Environment.NewLine) ;

解决UPDATE时的异常

.nettiers和SQLite搅合到一块之后遇到的问题的更多相关文章

  1. tornado 学习笔记2 Python web主流框架

    2.1 Django 官方网址:https://www.djangoproject.com/ 简介:Django is a high-level Python Web framework that e ...

  2. 关于android应用--内存的优化

    以下内容为转载自网上,然后自己加工贴合到一块的: 原文地址:http://www.cnblogs.com/frydsh/archive/2012/12/09/2810601.html http://w ...

  3. About Undefined Behavior[译文]

    原文:blog.llvm.org/2011/05/what-every-c-programmer-should-know.html 人们偶尔会问为什么LLVM的汇编代码有时会在优化器打开时产生SIGT ...

  4. django框架介绍

    主要内容 1.        Django框架发展 2.        Django架构,MTV模式 3.        开发流程 4.        开发实例——Poll python下各种框架 一 ...

  5. 【笔记】Python基础二:数据类型之集合,字符串格式化,函数

    一,新类型:集合 集合出现之前 python_l = ['lcg','szw','zjw'] linux_l = ['lcg','szw','sb'] #循环方法求交集 python_and_linu ...

  6. SSH和SSM的区别

    一怒成仙 博客园 首页 新随笔 联系 管理 订阅 随笔- 54  文章- 1  评论- 0    SSH(Struts,Spring,Hibernate)和SSM(SpringMVC,Spring,M ...

  7. SSH(Struts,Spring,Hibernate)和SSM(SpringMVC,Spring,MyBatis)的区别

    SSH 通常指的是 Struts2 做前端控制器,Spring 管理各层的组件,Hibernate 负责持久化层. SSM 则指的是 SpringMVC 做前端控制器,Spring 管理各层的组件,M ...

  8. 笨重的mfc还在基于系统控件,熟练的mfc工程师还比不过学习Qt一个月的学生开发效率高(比较精彩,韦易笑)

    作者:韦易笑链接:https://www.zhihu.com/question/29636221/answer/45102191来源:知乎著作权归作者所有,转载请联系作者获得授权. 更新:擦,本来只有 ...

  9. 2016年我们重新思考移动互联网创业的风险, 微信还是APP?

    感觉这两年前端开发又火起来了,很多做内容创业和做微电商创业的人,往往都选择了运营微信号.对于做纯技术开发的人来说,一般是看不上微信号的,感觉没什么技术含量,或者说没什么技术壁垒.也有另一批人观点相反的 ...

随机推荐

  1. Redis未授权访问攻击过程与防范

    一.Redis未授权访问攻击过程 攻击主机:kali 目标主机:centos6.8(10.104.11.178) Redis版本:2.8 攻击条件:默认配置,未进行认证 攻击步骤详解: 1.Kali攻 ...

  2. 安装 Office project 2013 时提示找不到 Office.zh-cn\OfficeLR.cab

    昨天在安装project 时总是弹出下图中的提示框,在网上搜索了很多办法但是没有解决这个问题. 后来进入到office.zh-cn的文件夹中,在officemui.msi文件中右键卸载,然后在重新安装 ...

  3. SQL datetime和smalldatetime区别

    datetime 存储大小8个字节,精确到分后的3为小数,日期范围从1753 年 1 月 1 日到 9999 年 12 月 31 日:而 smalldatetime存储大小为4个字节,精确到分,日期范 ...

  4. sql server 笔记(数据类型/新建、修改、删除数据表/)

    1.数据类型: Character 字符串 / Unicode 字符串 / Binary 类型 / Number 类型  /  Date 类型  / 其他数据类型 详解:http://www.w3sc ...

  5. LISP语言学习资源

    LISP的介绍:Paul Graham 的主页 http://paulgraham.com/index.html Lisp之根源 - 保罗·格雷厄姆 http://daiyuwen.freeshell ...

  6. pat1082. Read Number in Chinese (25)

    1082. Read Number in Chinese (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yu ...

  7. HBuilder更换部分

    1.HBuilder工作空间的更换 HBuilder的默认工作空间的修改并不像其他ide一样,在设置里进行更改,而是在工具中进行设置. 1.单击菜单栏“工具”,选择“变更默认代码存放目录” 2.进行修 ...

  8. Day6上 括号匹配专项

    滑稽的题 T1 #include<iostream> #include<cstring> #include<queue> #include<algorithm ...

  9. Tiled 地图编辑器使用教程-官方demo

    一.Tiled Map Editer 下载地址 http://www.mapeditor.org/download.html 二.官方教程查看 下载安装后,不管windows还是Mac系统都包含官方例 ...

  10. Linux mysql 基础操作

    命令  #查看版本 mysql --version   #进入mysql 命令 mysql -u root -p mysql -u root@localhost  (没有密码的情况)   #创建数据库 ...