sqlite在.NET中的应用

前端之家收集整理的这篇文章主要介绍了sqlite在.NET中的应用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。


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

一:安装

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

PS: UPDATED IN 2013-06-04,原网站已经不存在,现在已经更新到:http://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki

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

二:新建数据库

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

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

三:数据库维护

可以在VS中方面的维护sqlITE数据,如下图:

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

四:混合模式

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

System.Data.sqlite

System.Data.sqlite.Linq

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

@H_403_54@<?xml version="1.0" encoding="utf-8" @H_403_54@?>
@H_403_54@<configuration@H_403_54@>
  @H_403_54@<startup useLegacyV2RuntimeActivationPolicy=@H_403_54@"true"@H_403_54@>
    @H_403_54@<supportedRuntime version=@H_403_54@"v4.0"@H_403_54@/>
  @H_403_54@</startup@H_403_54@>
@H_403_54@</configuration@H_403_54@>

五:sqliteHelper

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

@H_403_54@using System;
@H_403_54@using System.Collections.Generic;
@H_403_54@using System.Linq;
@H_403_54@using System.Text;
@H_403_54@using System.Data.sqlite;
@H_403_54@using System.Data;
@H_403_54@using System.Data.Common;

@H_403_54@namespace Com.Luminji.DataService.sqlHelpers
{
    @H_403_54@public @H_403_54@class sqliteHelper
    {
        /// <summary>
        /// ConnectionString样例:Data Source=Test.db3;Pooling=true;FailIfMissing=false
        /// </summary>
        @H_403_54@public @H_403_54@static @H_403_54@string ConnectionString { @H_403_54@get; @H_403_54@set; }

        @H_403_54@private @H_403_54@static @H_403_54@void PrepareCommand(sqliteCommand cmd,sqliteConnection conn,@H_403_54@string cmdText,@H_403_54@params @H_403_54@object[] p)
        {
            @H_403_54@if (conn.State != ConnectionState.Open)
                conn.Open();
            cmd.Parameters.Clear();
            cmd.Connection = conn;
            cmd.CommandText = cmdText;
            cmd.CommandType = CommandType.Text;
            cmd.CommandTimeout = 30;
            @H_403_54@if (p != @H_403_54@null)
            {
                @H_403_54@foreach (@H_403_54@object parm @H_403_54@in p)
                    cmd.Parameters.AddWithValue(@H_403_54@string.Empty,parm);
            }
        }

        @H_403_54@public @H_403_54@static DataSet ExecuteQuery(@H_403_54@string cmdText,@H_403_54@params @H_403_54@object[] p)
        {
            @H_403_54@using (sqliteConnection conn = @H_403_54@new sqliteConnection(ConnectionString))
            {
                @H_403_54@using (sqliteCommand command = @H_403_54@new sqliteCommand())
                {
                    DataSet ds = @H_403_54@new DataSet();
                    PrepareCommand(command,conn,cmdText,p);
                    sqliteDataAdapter da = @H_403_54@new sqliteDataAdapter(command);
                    da.Fill(ds);
                    @H_403_54@return ds;
                }
            }
        }

        @H_403_54@public @H_403_54@static @H_403_54@int ExecuteNonQuery(@H_403_54@string cmdText,@H_403_54@params @H_403_54@object[] p)
        {
            @H_403_54@using (sqliteConnection conn = @H_403_54@new sqliteConnection(ConnectionString))
            {
                @H_403_54@using (sqliteCommand command = @H_403_54@new sqliteCommand())
                {
                    PrepareCommand(command,p);
                    @H_403_54@return command.ExecuteNonQuery();
                }
            }
        }

        @H_403_54@public @H_403_54@static sqliteDataReader ExecuteReader(@H_403_54@string cmdText,p);
                    @H_403_54@return command.ExecuteReader(CommandBehavior.CloseConnection);
                }
            }
        }

        @H_403_54@public @H_403_54@static @H_403_54@object ExecuteScalar(@H_403_54@string cmdText,p);
                    @H_403_54@return command.ExecuteScalar();
                }
            }
        }

    }
}

猜你在找的Sqlite相关文章