当前位置:   article > 正文

C#中数据本地存储方案之SQLite_c# sqlite dataset 数据保存

c# sqlite dataset 数据保存

即使是做网络应用,在断线情况下,也需要考虑数据的本地存储。在SQLite出现之前,数据量大的情况下,我们一直使用ACCESS,数据量小,则文件存储。ACCESS不支持事务原子性,在断电情况下(这种情况总是会发生)会导致数据很难恢复。

一:安装

SQLITE,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统。我直接使用的是http://sqlite.phxsoftware.com/(An open source ADO.NET provider for the SQLite database engine)。下载完毕是一个EXE,安装后根目录如下:

clip_image002

Bin下有一个测试工具,可以查看本地运行SQLITE的各项性能指标。

二:新建数据库

安装完毕后,打开visual studio,新建数据连接,可以看到数据源多了一项SQLite。

clip_image004

新建连接,如下图。SQLITE的数据库,保存后是一个文件。

clip_image006

三:数据库维护

可以在Visual Studio中方面的维护SQLITE数据,如下图:

clip_image008

可以在Visual Studio中使用类似SQL查询分析器的功能,如下图:

clip_image010

四:混合模式

安装完毕,可以直接在项目集的引用中,多了

System.Data.SQLite

System.Data.SQLite.Linq

两个程序集,由于http://sqlite.phxsoftware.com/的System.Data.SQLite是混合模式程序集,是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集。故需要在App.config中配置如下参数。

 
 
  1. <?xml version="1.0" encoding="utf-8" ?> 
  2. <configuration> 
  3.   <startup useLegacyV2RuntimeActivationPolicy="true"> 
  4.     <supportedRuntime version="v4.0"/> 
  5.   </startup> 
  6. </configuration> 

五:SQLiteHelper

最后,提供一个自己写的SQLiteHelper:

 
 
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Data.SQLite;  
  6. using System.Data;  
  7. using System.Data.Common;  
  8.  
  9. namespace Com.Luminji.DataService.SQLHelpers  
  10. {  
  11.     public class SQLiteHelper  
  12.     {  
  13.         /// <summary>  
  14.         /// ConnectionString样例:Datasource=Test.db3;Pooling=true;FailIfMissing=false  
  15.         /// </summary>  
  16.         public static string ConnectionString { getset; }  
  17.  
  18.         private static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, string cmdText, params object[] p)  
  19.         {  
  20.             if (conn.State != ConnectionState.Open)  
  21.                 conn.Open();  
  22.             cmd.Parameters.Clear();  
  23.             cmd.Connection = conn;  
  24.             cmd.CommandText = cmdText;  
  25.             cmd.CommandType = CommandType.Text;  
  26.             cmd.CommandTimeout = 30;  
  27.             if (p != null)  
  28.             {  
  29.                 foreach (object parm in p)  
  30.                     cmd.Parameters.AddWithValue(string.Empty, parm);  
  31.             }  
  32.         }  
  33.  
  34.         public static DataSet ExecuteQuery(string cmdText, params object[] p)  
  35.         {  
  36.             using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))  
  37.             {  
  38.                 using (SQLiteCommand command = new SQLiteCommand())  
  39.                 {  
  40.                     DataSet ds = new DataSet();  
  41.                     PrepareCommand(command, conn, cmdText, p);  
  42.                     SQLiteDataAdapter da = new SQLiteDataAdapter(command);  
  43.                     da.Fill(ds);  
  44.                     return ds;  
  45.                 }  
  46.             }  
  47.         }  
  48.  
  49.         public static int ExecuteNonQuery(string cmdText, params object[] p)  
  50.         {  
  51.             using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))  
  52.             {  
  53.                 using (SQLiteCommand command = new SQLiteCommand())  
  54.                 {  
  55.                     PrepareCommand(command, conn, cmdText, p);  
  56.                     return command.ExecuteNonQuery();  
  57.                 }  
  58.             }  
  59.         }  
  60.  
  61.         public static SQLiteDataReader ExecuteReader(string cmdText, params object[] p)  
  62.         {  
  63.             using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))  
  64.             {  
  65.                 using (SQLiteCommand command = new SQLiteCommand())  
  66.                 {  
  67.                     PrepareCommand(command, conn, cmdText, p);  
  68.                     return command.ExecuteReader(CommandBehavior.CloseConnection);  
  69.                 }  
  70.             }  
  71.         }  
  72.  
  73.         public static object ExecuteScalar(string cmdText, params object[] p)  
  74.         {  
  75.             using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))  
  76.             {  
  77.                 using (SQLiteCommand command = new SQLiteCommand())  
  78.                 {  
  79.                     PrepareCommand(command, conn, cmdText, p);  
  80.                     return command.ExecuteScalar();  
  81.                 }  
  82.             }  
  83.         }  
  84.  
  85.     }  

六:附注

SQLite官方网站: http://www.sqlite. org/ 时第一眼看到关于SQLite的特性。

1. ACID事务

2. 零配置 – 无需安装和管理配置

3. 储存在单一磁盘文件中的一个完整的数据库

4. 数据库文件可以在不同字节顺序的机器间自由的共享

5. 支持数据库大小至2TB

6. 足够小, 大致3万行C代码, 250K

7. 比一些流行的数据库在大部分普通数据库操作要快

8. 简单, 轻松的API

9. 包含TCL绑定, 同时通过Wrapper支持其他语言的绑定

10. 良好注释的源代码, 并且有着90%以上的测试覆盖率

11. 独立: 没有额外依赖

12. Source完全的Open, 你可以用于任何用途, 包括出售它

13. 支持多种开发语言,C, PHP, Perl, Java, ASP .NET,Python

原文链接:http://www.cnblogs.com/luminji/archive/2010/12/19/1910396.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/418915
推荐阅读
相关标签
  

闽ICP备14008679号