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中配置如下参数。

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

五:sqliteHelper

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

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

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

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

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

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

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

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

    }
}
原文链接:https://www.f2er.com/sqlite/199960.html

猜你在找的Sqlite相关文章