用ASP_Net实现将Word文档转换为PDF格式 必备工具
用ASP_Net实现将Word文档转换为PDF格式 必备工具
史上最强全面解析SQLite
目录
使用SQLite编程的快速介绍............................................................. 5
下载代码 .......................................................................... 5
创建一个新数据库 .................................................................. 5
使用 SQLite 编写程序 .............................................................. 5
SQLite适用的范围 ..................................................................... 7
SQLite最佳试用场合................................................................ 7
哪些场合适合使用其他的关系型数据库管理系统(RDBMS) ............................... 9
SQLite 第三版总览(简介).............................................................. 10
命名上的变化 ..................................................................... 10
新的文件格式 ..................................................................... 10
弱类型和BLOB技术支持 ............................................................ 11
支持UTF-8和UTF-16............................................................... 11
用户定义的分类排序 ............................................................... 12
64字节的行编号................................................................... 12
改良的并发性 ..................................................................... 13
致谢 ............................................................................. 13
SQLite 第三版中的数据类型............................................................ 14
1.存储类别 ....................................................................... 14
2.列之间的亲和性 ................................................................. 14
3.比较表达式 ..................................................................... 16
4.运算符 ......................................................................... 17
5.分类,排序混合挑选 ........................................................... 17
6.其它亲和性模式 ................................................................. 17
7.用户定义的校对顺序 ............................................................. 18
SQLite 不支持的 SQL 特性............................................................. 20
SQLite的体系结构简介 ................................................................ 21
简介 ............................................................................. 21
接口程序 ......................................................................... 21
Tokenizer ........................................................................ 21
Parser ........................................................................... 22
代码发生器 ....................................................................... 22
虚拟机器 ......................................................................... 22
B-树 ............................................................................. 23
页面高速缓存 ..................................................................... 23
OS 接口程序 ...................................................................... 23
Utilities ........................................................................ 23
测试代码 ......................................................................... 23
SQLite与其他数据库的速度比较 ........................................................ 24
执行程序总结 ..................................................................... 24
测试环境 ......................................................................... 24
测试1:1000 INSERTs............................................................... 25
测试2:在事务处理程序中的 25000 INSERTs........................................... 25
测试3:在编入索引表格中的25000 INSERTs ........................................... 26
测试4:没有索引的 100 SELECTs..................................................... 26
测试5:在一个字符串比较上的100 SELECTs ........................................... 27
2 / 123
测试6:创建索引................................................................... 27
测试7:没有索引的5000 SELECTs .................................................... 27
测试8:没有索引的1000 UPDATEs .................................................... 28
测试9:有索引的25000 UPDATEs ..................................................... 28
测试10:有索引的25000 text UPDATEs ............................................... 28
测试11:来源于SELECT的INSERTs ................................................... 29
测试12:没有索引的DELETE ......................................................... 29
测试13:有索引的DELETE ........................................................... 29
测试14:一个大 DELETE之后的一个大INSERT.......................................... 30
测试15:一个大的DELETE及许多小INSERTs ........................................... 30
测试16:DROP TABLE................................................................ 30
SQLite中的空处理与其它数据库引擎比较 .............................................. 31
SQLite 数据库的速度比较(wiki)........................................................ 34
Test 1: 1000 INSERTs ............................................................. 36
Test 2: 25000 INSERTs in a transaction ........................................... 36
Test 3: 25000 INSERTs into an indexed table ...................................... 37
Test 4: 100 SELECTs without an index ............................................. 37
Test 5: 100 SELECTs on a string comparison ....................................... 38
Test 6: INNER JOIN without an index .............................................. 38
Test 7: Creating an index ........................................................ 38
Test 8: 5000 SELECTs with an index ............................................... 39
Test 9: 1000 UPDATEs without an index ............................................ 39
Test 10: 25000 UPDATEs with an index ............................................. 39
Test 11: 25000 text UPDATEs with an index ........................................ 40
Test 12: INSERTs from a SELECT ................................................... 40
Test 13: INNER JOIN with index on one side ....................................... 41
Test 14: INNER JOIN on text field with index one side ......................... 41
Test 15: 100 SELECTs with subqueries. Subquery is using an index ................. 41
Test 16: DELETE without an index ................................................. 42
Test 17: DELETE with an index .................................................... 42
Test 18: A big INSERT after a DELETE ......................................... 42
Test 19: A big DELETE followed by many small INSERTs ............................. 42
Test 20: DROP TABLE .............................................................. 43
附加文件...................................................................... 43
SQLite在Windows中的性能调试 ........................................................ 44
直接使用SQLite................................................................... 44
2:Indexes 和数据库结构是非常重要的。 ............................................ 44
3:页面规模也很重要 .............................................................. 45
4:成群的索引 .................................................................... 45
5:作为读这篇文章的收获,这里有个不智能的事情需要提醒你。 ........................ 46
SQLite中如何用触发器执行取消和重做逻辑 .............................................. 47
SQLite3 C/C++ 开发接口简介(API函数) ............................................... 55
1.0 总览 ......................................................................... 55
2.0 C/C++ 接口 ................................................................... 55
如何在VS 2003下编译SQLite .......................................................... 61
下载 ............................................................................. 61
创建一个 DLL 工程 ................................................................ 61
3 / 123
把 SQLite 的源文件添加到工程当中去 ............................................... 61
Make a .DEF file ................................................................. 61
如何编译 SQLITE.EXE 命令行程序 ................................................... 62
SQLite常见问题解答 .................................................................. 64
Frequently Asked Questions ....................................................... 64
(1)如何建立自动增长字段? ......................................................... 64
(2)SQLite支持何种数据类型?...................................................... 65
(3)SQLite允许向一个integer型字段中插入字符串!.................................. 65
(4)为什么SQLite不允许在同一个表不同的两行上使用0和0.0作主键? ................. 65
(5)多个应用程序或一个应用程序的多个实例可以同时访问同一个数据库文件吗? .......... 65
(6)SQLite线程安全吗?............................................................ 66
(7)在SQLite数据库中如何列出所有的表和索引? ..................................... 66
(8)SQLite数据库有已知的大小限制吗?.............................................. 67
(9)在SQLite中,VARCHAR字段最长是多少?.......................................... 67
(10)SQLite支持二进制大对象吗?................................................... 67
(11)在SQLite中,如何在一个表上添加或删除一列? .................................. 68
(12)我在数据库中删除了很多数据,但数据库文件没有变小,是Bug吗? ................. 68
(13)我可以在商业产品中使用SQLite而不需支付许可费用吗? .......................... 68
(14)如何在字符串中使用单引号(')? ................................................ 68
(15)SQLITE_SCHEMA error是什么错误?为什么会出现该错误?.......................... 69
(16)为什么 ROUND(9.95,1) 返回 9.9 而不是 10.0? 9.95不应该圆整 (四舍五入)吗?... 70
SQLite的原子提交原理 ................................................................ 71
1.0 简介 ......................................................................... 71
2.0 硬件设定 ..................................................................... 71
3.0 单个文件提交 ................................................................. 73
3.1 实始状态.................................................................. 73
3.2 申请一个共享锁............................................................ 73
3.3 从数据库里面读取信息...................................................... 74
3.4 申请一个Reserved Lock .................................................... 74
3.5 生成一个回滚日志文件...................................................... 75
3.6 修改用户进程中的数据页.................................................... 76
3.7 刷新回滚日志文件到存储设备中.............................................. 76
3.8 获得一个独享锁............................................................ 77
3.9 将变更写入到数据库文件中.................................................. 78
3.10 刷新变更到存储........................................................... 78
3.11 删除回滚日志文件......................................................... 79
3.12 释放锁................................................................... 80
4.0 回滚 ......................................................................... 81
4.1出事了,!!! ......................................................... 81
4.2 Hot Rollback Journals..................................................... 81
4.3 取得数据库的一个独享锁.................................................... 82
4.4 回滚没有完成的变更........................................................ 83
4.5 删除hot日志文件.......................................................... 83
4.6 如果一切正常,没有什么未完成的写操作...................................... 84
5.0 多文件提交 ................................................................... 84
5.1 每个数据库文件单独拥有日志............................................ 85
5.2 主日志文件................................................................ 85
4 / 123
5.3 更新回滚日志文件头........................................................ 86
5.4 修改数据库文件............................................................ 86
5.5 删除主日志文件............................................................ 87
5.6 清除回滚日志.............................................................. 87
6.0原子操作的一些实现细节........................................................ 88
6.1 总是记录整个扇区.......................................................... 88
6.2 写日志文件时垃圾的处理.................................................... 88
6.3 提交前缓存溢出............................................................ 89
7.0 优化 ......................................................................... 89
7.1 在事务间保存缓.......................................................... 90
7.2 独享访问模式.............................................................. 90
7.3 不必将空闲页写进日志...................................................... 90
7.4 单页更新及扇区原子写...................................................... 91
7.5 Filesystems With Safe Append Semantics.................................... 91
8.0 原子提交行为测试 ............................................................. 91
9.0 会导致完蛋的事情 ............................................................. 92
9.1 缺乏文件锁实现............................................................ 92
9.2 不完整的磁盘刷新.......................................................... 92
9.3 文件部分地删除............................................................ 93
9.4 写入到文件中的垃圾........................................................ 93
9.5 删除掉或更名了“hot”日志文件............................................. 93
10.0 总结及未来的路 .............................................................. 93
SQLite的查询优化 .................................................................... 95
一、影响查询性能的因素: ......................................................... 95
二、几个查询优化的转换 ........................................................... 95
三、 几种查询语句的处理(复合查询) .............................................. 95
四、子查询扁平化 ................................................................. 96
五、连接查询 ..................................................................... 98
六、索引 ......................................................................... 99
SQLITE3 使用总结.................................................................... 102
前序: .......................................................................... 102
一、版本 ........................................................................ 102
二、基本编译 .................................................................... 102
三、SQLITE操作入门.............................................................. 103
(1)基本流程................................................................ 103
(2)SQL语句操作 ............................................................ 104
(2)操作二进制.............................................................. 108
(4)事务处理................................................................ 109
四、给数据库加密 ................................................................ 109
五、后记 ........................................................................ 122
Windows Phone 10. XNA 3D 模型浏览器
Windows Phone提供了两种不同的用户界面编程模型:Silverlight 和 XNA。Silverlight是最常用的应用程序开发方式,应用程序可以使用控件、显示很多数据。XNA是2D和3D游戏开发方式。当年您也可以使用Silverlight来写游戏,或者使用XNA来编写一个以数据为中心的应用程序。每个应用程序框架都有其自身的优势;选择合适的编程模型,可以使您的生产率大幅提高,并且缩短应用上市时间。
在Windows Phone 7版本中,您不得不选择一个应用程序框架来开发您的应用程序或游戏。而Windows® Phone Mango中允许您同时使用两个编程框架,Silverlight应用程序中可以嵌入XNA模块,XNA应用程序中也可以嵌入Silverlight元素。这样的话,可以保持两个应用程序框架的优势。例如,在Windows Phone Mango之前,应用程序开发者在XNA中展现非拉丁字母的文字时会比较困难。UIElementRenderer提供了一个强制方法来解决这个问题。您可以使用UIElementRenderer来展现Silverlight TextBlock的元素(或者其他可以显示字体的颜色)。通过Silverlight的高级功能和矢量图,文本将会以XNA材质的方式进行显示。
Windows Phone Mango支持新的background transfer服务,可以独立运行您的应用程序。当您的应用程序处于隐藏状态或者用户导航到其他页面时,Transfers可以继续执行。
本次实验将会演示如何使用background transfer service来下载嵌入的XNA模型。
提示:这次动手实验是基于Windows Phone Mango的beta版,因此RTM在API方面可能会有一些变化。
课程目标
本次实验将帮助您完成下列目标:
• 编写应用程序使用backgroundtransferservice服务
• 在Silverlight应用程序中嵌入3DXNA模型
WindowsPhone 9. 使用本地数据库
课程概述
Windows® Phone Mango提供了一种新的方式来存储和管理您的应用程序的结构化数据 - Microsoft SQL Server Compact edition 数据库。本地数据库作为一个文件存储在应用程序的独立存储空间。本次实验使用 Tidy 应用程序来演示在 Windows® Phone应用程序中使用本地数据库。应用程序管理与项目相关的任务。每个任务支持附件以及预定义的数据集,包括优先级和截止时间。所有这些信息都使用本地数据库与几个主要的表:
Projects
Tasks
Attachments
Locations
下图显示在应用程序所支持的实体中包含的数据和实体之间的关系。
Figure 1
Database entities and their associations
Window Phone Mango 应用程序使用LINQ to SQL 访问本地数据库。 LINQ to SQL 提供了面向对象的方法,用于处理存储在数据库中的数据。System.Data.Linq.DataContext类连接应用程序的对象模型与数据库中的数据。
目标
本次动手实验,包括下列的任务:
利用本地数据库开发 Windows Phone Mango应用程序。
了解 Tidy 应用程序实施本地数据库。
Windows Phone 8. 增加提醒机制
一些Windows® Phone应用程序需要把安排通知给用户;这里典型的情景是一个警报或一个即将来临的事件的提醒。
能够预定通知是Windows PhoneMango许多新特点之一。它预定通知的二种类型:警报(Alarm)和提醒(Reminder);警报允许你指定一个声音,当Notification被触发时。提醒允许你指定一个URI他将在点击提醒的时候执行。这就意味着,如果是会议提醒,URI可以指定一个本次会议的深层链接。当用户点击提醒,你的应用将导航到该提醒的URI并启动用户需要的页面。
本实验演示了如何使用Windows PhoneMango的 API为你的应用程序增加提醒。
目标
本次动手实验将帮助您完成下列目标:
• 添加提醒到你的Windows Phone应用程序中
WindowsPhone 7. 多任务
原始的Windows® Phone 开发工具不允许你的应用程序在未运行的时候执行操作。这个限制了你在你的应用程序中的发挥。但是代号为 Mango的Windows Phone 允许你的应用程序在未激活时通过使用后台代理来执行操作。为了包含后台代理的逻辑你可以在你的应用程序解决方案中添加一个新类别的项目。这样你的应用程序就在操作系统中注册后台代理并且在你的程序休眠的时候安排代理运行。这可以有效的使你开发的应用程序在Windows Phone Mango中使用多任务。另外,代号Mango的Windows Phone允许一个应用程序用多个tile与之关联,通过选择开始菜单上的这些tiles可以使你很快定位到应用程序的不同位置。
本次实验通过这个名叫“Tidy”的应用来展示这些新特性,需要必要的步骤为你的应用实施和注册后台代理。我们将使用一个后台代理来更新处于休眠状态程序的tiles。
目标
这个实验提供下面的指导帮你完成任务:
• 了解怎样把多任务的tiles放到开始菜单中
• 了解如何管理一个应用的tiles
• 在你的应用中运行一个后台代理
Windows Phone 6. 快速应用程序切换
原有的Windows® Phone操作系统拥有的每个应用程序没有激活墓碑机制,这就意味着其状态会序列化并被保存在应用程序的独立存储中。当用户返回墓碑化的应用程序时,他不得不等待应用程序反序列化其状态并恢复状态。
在Windows® Phone Mango版本中不再需要这样的机制了。一旦应用程序被切换到后台,操作系统将保证其镜像仍然保存在内存中,这样在激活应用程序时就不需要额外的性能开销了。当用户再次激活应用程序时,用户体验可以达到在瞬间恢复应用程序在内存中的状态。
这种新的机制叫做快速应用程序切换(Fast Application Switching ,FAS),在本次实验中,我们将演示在应用程序切换到后台后,如何存储应用程序的状态。了解您的应用程序镜像是否被保存,允许你执行必要的操作来恢复应用程序的状态。本次实验中将演示如何使用Tidy应用程序来执行这种。
目标
本次动手实验,包括下列的任务:
• 识别,一旦你的应用程序被激活,镜像是否被保持。
• 在Debug状态下,强制应用程序执行墓碑机制。
Windows Phone 5. 使用后台传输服务
当你开发版本号为Mango的Windows Phone应用程序时,您可能需要传输文件到应用程序上。同时您的应用程序可能需要这些文件才能正常工作,也有一些情况下可以异步下载这文件,当传输完成时通知应用程序。像这样包括下载较大的文件(音乐和视频文件),上传一些较大的报告到服务器上或者备份应用程序的数据库。
在版本号为Mango的Windows Phone 手机中,新增的功能中就包括能够在后台执行文件传输任务,并且得到有关传输的进度通知。此功能的一个重要组成部分是后台程序保持激活状态,即使应用程序处于休眠状态,甚至是终止。
本实验演示了如何使用版本为Mango的Windows Phone的API添加后台传输服务到您的应用程序中,并演示了如何处理后台传输服务的请求。
目标
本实验将帮助您完成下列目标:
• 添加后台传输服务(上传和下载)到您的Windows Phone 手机应用程序中。
• 了解后台传输服务的工作原理和管理您的应用程序请求
Windows Phone 4. 使用消息推送机制
微软Windows® Phone推送通知服务(PushNotificationService)为第三方开发者提供了一个弹性、专注、可持续的通道,支持发送消息、从服务器(web services)端更新Windows® Phone应用程序。
在这一部分中,一个移动应用程序需要经常的查看对应的web service,以了解是否有未处理的Notification。如果保持有效状态,就会造成设备的手机模块始终处于打开状态,进而影响待机时间。如果使用Push Notifications,Web Service只要在重要的更新时,才会通知到应用程序。
Figure1
PushNotifications
当Web Service有信息需要发送到应用程序时,它发送一个Push Notification到微软的PushNotificationService服务器上,然后会将这个Push Notification转发给应用程序。依赖于Push Notification的格式和负载量,这个信息会有三种形式展现:作为原始数据发布给应用程序,应用程序的Tile将更新,或者弹出一个Toast notification。如果需要,应用程序可以使用自有的协议来与Web Service通讯。
在Push Notification被发送之后,PushNotificationService服务器会发送一个响应代码到您的Web Service。事实上,PushNotificationService不会提供您的推送通知从您的Web Service到应用程序之间的端到端确认方式。更多信息,请参考PushNotificationServiceResponseCodesforWindows®Phone.
本次动手实验将会覆盖推送通知,并介绍Silverlight中http服务的用法。在整个实验中,您将会创建服务器端的逻辑,用来发送消息到Push Notification Service。您也会创建一个简单的Windows® Phone 7 Mango应用程序,作为客户端,用来接收推送通知。客户端应用程序将会接收天气更新。服务器端的业务应用程序(一个简单的WPF应用)将会发送天气提醒道已经通过Push Notification Services注册的客户端应用程序上去。一旦Windows® Phone 7客户端应用程序接收到提醒,将会显示接收到的信息。
提示:服务器端的天气应用程序使用WindowsPhone.Recipes.Push.Messasges.dll,封装了所有发送、从Microsoft Push Notification Services接受响应的业务逻辑和功能。更多信息请参考:http://windowsteamblog.com/windows_phone/b/wpdev/archive/2011/01/14/windows-push-notification-server-side-helper-library.aspx.
目标
在本次实验课程中,您将会:
• 熟悉Windows® Phone 7应用程序的通讯功能
• 熟悉Push Notification的概念和在手机上的使用行为
• 理解Push Notifications在云端和手机端如何工作
• 使用手机Push Notifications服务,创建一个Tokens (tiles), Toasts, 和 raw push notifications的订阅
• 使用WebClient注册PushNotifications
• 使用Networkstatus来显示当前手机网络的状态
• 创建一个SL应用程序,用来注册pushnotificationservices(包括token和toast)
◦ 运行期控制push事件events(token,toast,和raw)
◦ 在Shell中显示token和toast信息
• 管理应用程序独立更新的sub-tiles,并链接到应用程序的制定位置(仅在Windows®Phone7.1中有效)
Windows Phone 3. PhotoFun 应用程序
由于微软提供了公共规格定义,所有的Windows Phone设备必须有500万像素以上的摄像头。在Windows Phone 7.0中,应用程序想调用摄像头只能使用CameraCaptureTaskchooser。一个应用程序可以使用chooser来得到内置摄像头的照片。
新的Windows Phone Mango版本提供了更多摄像头的集成功能,包括在Microsoft.Devices.PhotoCamera类中,该类提供了摄像头的细粒度控件,并且可以让你的应用程序直接访问摄像头空间和原始数据。
本次实验演示了如何使用PhotoCamera API来捕捉live camera feed和操作相机显示预览。本次实验也会演示如何访问一些其他摄像头控件,包括摄像头按钮。
提示:这次实验针对Windows Phone Mango版本,最终RTM版本可能略有不同。
课程目标
本次实验将帮助您完成下列目标:
• 编写应用程序来捕捉livecamerafeed并且在屏幕上显示预览
• 通过摄像头捕捉照片并且保存到设备的medialibrary中
• 在一个单独的线程中执行图片处理操作,避免阻塞UI
Windows Phone 2.Launchers和Choosers框架
Launchers和Choosers框架使Windows Phone应用程序可以为用户提供一些功能,比如拨打电话,发送电子邮件,选择图片等。
Windows Phone应用程序模型使每个应用程序的执行(包括内存隔离)以及文件存储相互隔离。 Windows Phone应用程序不能直接读取一些信息,比如联系人列表,也不能直接启动另外一个应用程序,比如拨号应用程序和短信息应用程序。为了支持一些一般任务比如拨打电话或者发送短信息,Windows Phone提供了一系列Launcher和Chooser使应用程序可以间接完成这些事情。Launchers和Choosers切换当前应用程序至内置应用程序,并在将当前运行的应用程序切换至后台的时候提供一种无缝的体验。
该框架分为以下两部分:
• Launcher - 一个“没有返回信息” 的动作, 它可以调用一个特定的手机功能,比如发送短信息,打开一个Web页面,或者拨打电话
• Chooser – 一个 “打开文件对话框” 的动作, 它可以选择一个特定应用程序存储区域的信息,比如选择电子邮件地址,联系人,或者照片。
以下是代号为“芒果”的Windows Phone 7提供的完整的Launcher和Chooser列表:
Launcher
• EmailComposeTask – 撰写新的电子邮件
• MarketplaceDetailTask – 启动Marketplace并显示指定应用程序的详细信息
• MarketplaceHubTask –启动Marketplace
• MarketplaceReviewTask –启动Marketplace以便为当前应用程序提供评论
• MarketplaceSearchTask –启动Marketplace并执行相关内容的搜索
• MediaPlayerLauncher –启动媒体播放器
• PhoneCallTask – 向指定的号码拨打电话
• SaveEmailAddressTask – 撰写新的电子邮件
• SavePhoneNumberTask –保存电话号码
• SearchTask –启动网页搜索应用程序
• SmsComposeTask –撰写新的短信息
• WebBrowserTask –可以启动Web浏览器到指定的URL
Choosers
• EmailAddressChooserTask – 从联系人列表中选择一个电子邮件地址
• CameraCaptureTask – 打开照相机应用程序以便拍照
• PhoneNumberChooserTask –从联系人列表中选择一个电话号码
• PhotoChooserTask – 从Picture Gallery中选择一张图片
• Contacts –根据姓名,电子邮件地址,电话号码搜索联系人.
• Appointments –搜索一段时间内的用户的日程安排
Windows Phone 1.设备状态应用程序
由于所有Windows Phone设备都要符合一个最低功能的硬件规格,所以设备之间会有一些略微的不同,因为硬件厂商会超过最低硬件规格来定义自己的设备硬件。所以,在Windows Phone 7 Mango版本中,一些新的可选硬件组件(即陀螺仪)会被添加进来。
应用程序应该能够通过编程接口来检测并获取这些硬件规格上的略微不同。
本次实验将向您展示如何创建一个简单的应用程序来实验获取设备的功能,并显示给最终用户。
本次实验将帮助您完成下列目标:
编写一个应用程序来显示Windows Phone Mango设备的功能兼容性;
熟悉查询设备信息的编程接口。