zoukankan      html  css  js  c++  java
  • SQLite之C#连接SQLite

    SQLite是一个开源、免费的小型的Embeddable RDBMS(关系型数据库),用C实现,内存占用较小,支持绝大数的SQL92标准,现在已变得越来越流行,它的体积很小,被广泛应用于各种不同类型的应用中。SQLite已经是世界上布署得最广泛的SQL数据库引擎,被用在无以计数的桌面电脑应用中,还有消费电子设备中,如移动电话、掌上电脑和MP3播放器等。

    SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它 占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多 程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度 比他们都快。SQLite第一个Alpha版本诞生于2000年5月. 至今已经有10个年头,SQLite也迎来了一个版本 SQLite 3已经发布。

      官方网站:http://www.sqlite.org/

          详细简介:http://baike.baidu.com/view/19310.htm

    要使用sqlite保存数据,则需要用到SQLite操作驱动的dll,可以在官网下载,安装完成后,引用安装目录下的System.Data.SQLite.dll文件,

    可以在我百度网盘下载:sqlite-netFx40-setup-bundle-x64-2010-1.0.96.0.exe

    你也可以直接在项目中安装sqlite,项目会自动添加引用

    安装完成后,你会发现。app.config中会自动生成配置代码

    复制代码
     1 <?xml version="1.0" encoding="utf-8"?>
     2 <configuration>
     3     <configSections>
     4         <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
     5         <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
     6         <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=4.1.0.0, Culture=neutral, PublicKeyToken=null" />
     7     </configSections>
     8     <system.data>
     9         <DbProviderFactories>
    10             <remove invariant="System.Data.SQLite.EF6" />
    11             <add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" 
    type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" /> 12 </DbProviderFactories> 13 </system.data> 14 <entityFramework> 15 <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> 16 <providers> 17 <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 18 <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" /> 19 </providers> 20 </entityFramework> 21 <connectionStrings> 22 <add name="sqlite" connectionString="Data Source=|DataDirectory|document.db;Pooling=true;FailIfMissing=false" 23 providerName="System.Data.SQLite" /> 24 </connectionStrings> 25 </configuration>
    复制代码

    这些步骤完成后,就可以操作sqlite数据库。如果你链接数据库的时候。提示:

    未能加载文件或程序集“System.Data.SQLite, Version=1.0.66.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139”或它的某一个依赖项。试图加载格式不正确的程序。

    这是因为目标平台不匹配, 原因是SQLite下载的平台类型不对造成的,因为你下载的sqlite驱动分x86和x64位,你可以把项目平台改成匹配的,右键项目属性:

    前期准备完成,在编码前,当然少不了一个工具,来对数据库进行管理。创建库、表、执行SQL语句操作,

    比如:SQLite Expert Personal 3,Navicat for SQLite等等,

    SQLite Expert Personal 3界面,

    我这里使用Navicat for SQLite来管理sqlite,

    打开Navicat for SQLite,单击连接,如图:

    连接成功后,创建表,添加数据。

    我这里创建一个表:document.db,并添加简单的数据用于测试

    接下来可以在vs中编码,如果用过sql server,那么sqlite就没什么难的

     使用原生态的ADO.NET访问SQLite

      原生态的访问,就是说直接用connection和command这些对象打开数据库,然后打开连接,进行数据的操作。

    在App.config中配置connectionStrings

    1 <connectionStrings>
    2         <add name="sqlite" connectionString="Data Source=|DataDirectory|document.db;Pooling=true;FailIfMissing=false"
    3           providerName="System.Data.SQLite" />
    4     </connectionStrings>

    上面的connectionstring配置节的db就是SQLite的数据库文件,将它放在Web应用的App_Data目录,|DataDirectory|就代表这个目录的位置,后面的就是文件名。   剩下的就是我们使用企业库访问SQL Server是一样的了。

    到这里。其实有一个盲区。就是App_Data,是web应用中才有,但winform中是没有的。在winform中DataDirectory被程序弄成了apppath/bin/debug目录,所以,此时。你需要把document.db赋值到debug目录下面。

    现在来测试是否可以成功访问数据库并读取数据

    复制代码
     1    string sql = "SELECT * FROM userInfo";
     2             //string conStr = "D:/sqlliteDb/document.db";
     3             string connStr = @"Data Source=" + @"D:sqlliteDbdocument.db;Initial Catalog=sqlite;Integrated Security=True;Max Pool Size=10";
     4             using (SQLiteConnection conn = new SQLiteConnection(connStr))
     5             {
     6                 //conn.Open();
     7                 using (SQLiteDataAdapter ap = new SQLiteDataAdapter(sql, conn))
     8                 {
     9                     DataSet ds = new DataSet();
    10                     ap.Fill(ds);
    11 
    12                     DataTable dt = ds.Tables[0];
    13                 }
    14             }
    复制代码

    设置一个断点,发现已经得到sqlite中的数据

    如果想读取app.config中的数据库连接字符串

    复制代码
     1 string config = System.Configuration.ConfigurationManager.ConnectionStrings["sqlite"].ConnectionString;
     2             using (SQLiteConnection conn = new SQLiteConnection(config))
     3             {
     4                 conn.Open();
     5                 //DbCommand comm = conn.CreateCommand();
     6                 //comm.CommandText = "select * from userinfo";
     7                 //comm.CommandType = CommandType.Text;
     8 
     9                 //conn.Open();
    10                 using (SQLiteDataAdapter ap = new SQLiteDataAdapter(sql, conn))
    11                 {
    12                     DataSet ds = new DataSet();
    13                     ap.Fill(ds);
    14 
    15                     DataTable dt = ds.Tables[0];
    16                 }
    17             }
    复制代码

    使用SQLite.NET访问SQLite

      SQLite.NET也是一个数据访问组件,其中的System.Data.SQLite 就好像是.NET自带的System.Data.SqlClient一样。里面包含了connection、command等数据访问的常用对象,只是他们前面都有一个前缀sqlite。

    回到之前的app.config。当用NuGet程序包安装sqlite后。里面自动生成了如下代码

    复制代码
    1 <system.data>
    2         <DbProviderFactories>
    3             <remove invariant="System.Data.SQLite.EF6" />
    4             <add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" 
    type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" /> 5 </DbProviderFactories> 6 </system.data>
    复制代码

    即:添加一个DbProviderFactory的创建源,在代码中就可以使用DbProviderFactory类来创建SQLite的数据访问对象。

    复制代码
     1 DbProviderFactory fact = DbProviderFactories.GetFactory("System.Data.SQLite.EF6");
     2             using (DbConnection conn = fact.CreateConnection())
     3             {
     4                 conn.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["sqlite"].ConnectionString;
     5                 conn.Open();
     6                 DbCommand comm = conn.CreateCommand();
     7                 comm.CommandText = "select * from userInfo";
     8                 comm.CommandType = CommandType.Text;
     9                 using (IDataReader reader = comm.ExecuteReader())
    10                 {
    11                     while (reader.Read())
    12                     {
    13                         string dd = reader["name"].ToString();
    14                     }
    15                 }
    16             }
    复制代码

    同样测试看结果:

     

    可以用SQLiteConnection.CreateFile("D:/d.db");直接创建一个数据库文件

    网上找了一个sqlite帮助类,有需要的可以看下

     View Code

    其他资料:

      http://www.cnblogs.com/virusswb/archive/2010/09/17/SQLite1.html

      http://blog.csdn.net/heqichanggg/article/details/5784839

      http://www.cnblogs.com/luxiaoxun/p/3784729.html

      http://www.cnblogs.com/xugang/archive/2011/04/19/2020713.html

  • 相关阅读:
    BFS(双向) HDOJ 3085 Nightmare Ⅱ
    BFS+Hash(储存,判重) HDOJ 1067 Gap
    BFS(判断状态) HDOJ 3533 Escape
    三进制状压 HDOJ 3001 Travelling
    BFS(八数码) POJ 1077 || HDOJ 1043 Eight
    Codeforces Round #332 (Div. 2)
    BFS HDOJ 2102 A计划
    if语句
    shell脚本编程测试类型下
    shell脚本编程测试类型上
  • 原文地址:https://www.cnblogs.com/icebutterfly/p/7850689.html
Copyright © 2011-2022 走看看