C# SQLLite

1 篇文章 0 订阅

1。从www.sqlite.org下载SQLite 3.3.4的版本
为了方便,把它解压了,就一个SQLite3.exe,放入Windows目录下。 Cmd 进入命令行
创建数据库文件: >SQLite3 d:\test.db 就生成了一个test.db在d盘。这样同时也SQLite3挂上了这个test.db
查看可用命令 >.help 回车即可( 可以在这里直接输入SQL语句创建表格 用 ; 结束,然后回车就可以看到了)
查看创建了多少表 >.tables
查看表结构 >.schema 表名
查看目前挂的数据库 >.database
把查询输出到文件 >.output 文件名 > 查询语句; 查询结果就输出到了文件c:\query.txt

把查询结果用屏幕输出 >.output stdout
把表结构输出,同时索引也会输出 >.dump 表名
退出 >.exit 或者.quit

也可以在网站http://sqlitestudio.one.pl/index.rvt?act=download 上下载sqlitestudio进行图形化操作,用法和SQL Server相似。添加时右没有库就会新建在程序所在目录下,否则会附加所选库。

2。从http://sqlite.phxsoftware.com/下载Ado.net驱动。
下载了安装,在安装目录中存在System.Data.SQLite.dll
我们只需要拷贝这个文件到引用目录,并添加引用即可对SQLite数据库操作了
所有的Ado.net对象都是以SQLite开头的,比如SQLiteConnection
连接串只需要如下方式
Data Source=d:\test.db 或者DataSource=test.db--应用在和应用程序或者.net能够自动找到的目录
3。SQL语法
由于以前用SQLServer或者ISeries,所以DDL的语法很汗颜
1)创建一个单个Primary Key的table

CREATE TABLE  [Admin] (
 [UserName] [nvarchar] (20)   PRIMARY KEY NOT NULL ,
 [Password] [nvarchar] (50)   NOT NULL ,
 [Rank] [smallint] NOT NULL ,
 [MailServer] [nvarchar] (50)   NOT NULL ,
 [MailUser] [nvarchar] (50)   NOT NULL ,
 [MailPassword] [nvarchar] (50)   NOT NULL ,
 [Mail] [nvarchar] (50)   NOT NULL
   ) ;

2)创建一个多个Primary Key的table

CREATE TABLE [CodeDetail] (
[CdType] [nvarchar] (10) NOT NULL ,
[CdCode] [nvarchar] (20) NOT NULL ,
[CdString1] [ntext] NOT NULL ,
[CdString2] [ntext] NOT NULL ,
[CdString3] [ntext] NOT NULL,
PRIMARY KEY (CdType,CdCode)
) ;

3)创建索引, 还可以视图等等。

CREATE  INDEX [IX_Account] ON  [Account]([IsCheck], [UserName]);  
4.可用的SQL语句

Select * from Sqlite_master
Select datetime('now')
Select date('now')
Select time('now')

 以及很多函数,具体可以参考SQLite的wiki.
成批插入的时候,启动事务,比不启动事务快n倍
还有就是尽量使用参数化的SQL,估计和商用DB一样能够自动Prepare.

===========

sqlite可以在shell/dos command底下直接执行命令:sqlite3 film.db "select * from film;"
输出 HTML 表格sqlite3 -html film.db "select * from film;"
将数据库「倒出来」sqlite3 film.db ".dump" > output.sql
利用输出的资料,建立一个一模一样的数据库(加上以上指令,就是标准的SQL数据库备份了):sqlite3 film.db < output.sql
在大量插入资料时,先打这个指令begin;
插入完资料后要打这个指令,资料才会写进数据库中commit;

5 C#使用SQLite数据库
1 从http://sqlite.phxsoftware.com/(An open source ADO.NET provider for the SQLite database engine)下载驱动程序。
2 安装后,运行test.exe,测一下性能。
3 打开visual studio,新建数据连接,可以看到数据源多了一项SQLite DataBase File.用VS建立库 E:\ghc1.db
4 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>
5 提供一个自己写的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样例:Datasource=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, conn, cmdText, p);
                    return command.ExecuteNonQuery();
                }
            }
        }

        public static SQLiteDataReader ExecuteReader(string cmdText, params object[] p)
        {
            using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))
            {
                using (SQLiteCommand command = new SQLiteCommand())
                {
                    PrepareCommand(command, conn, cmdText, p);
                    return command.ExecuteReader(CommandBehavior.CloseConnection);
                }
            }
        }

        public static object ExecuteScalar(string cmdText, params object[] p)
        {
            using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))
            {
                using (SQLiteCommand command = new SQLiteCommand())
                {
                    PrepareCommand(command, conn, cmdText, p);
                    return command.ExecuteScalar();
                }
            }
        }

    }
}

另一种方法:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SQLite;

namespace SqliteWebApp
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //这个文件是预先生成的数据库文件
            string sqliteFilePath = Server.MapPath("~/App_Data/firstsqlite.db");
            DataSet ds = new DataSet();
            //声明一个Sqlite数据库的链接
            using (SQLiteConnection conn = new SQLiteConnection("Data Source=" + sqliteFilePath))
            {
                //创建sqlite命令
                using (SQLiteCommand comm = conn.CreateCommand())
                {
                    //打开数据库链接
                    conn.Open();
                    //插入数据
                    comm.CommandText = "INSERT INTO [t] VALUES(10,'Hello 9')";
                    comm.ExecuteNonQuery();

                    //更新数据
                    comm.CommandText = "UPDATE [t] SET name = 'Hello 10' WHERE id = 10";
                    comm.ExecuteNonQuery();

                    //使用参数插入数据
                    comm.CommandText = "INSERT INTO [t] VALUES(@id,@name)";
                    comm.Parameters.AddRange(
                        new SQLiteParameter[]{
                        CreateSqliteParameter("@id",DbType.Int32,4,11),
                        CreateSqliteParameter("@name",DbType.String,10,"Hello 11")
                        });
                    comm.ExecuteNonQuery();

                    comm.Parameters.Clear();
                    //select数据分页用limit就行,很方便
                    comm.CommandText = "Select * From MAIN.[t]";
                    using (SQLiteDataAdapter adapter = new SQLiteDataAdapter(comm))
                    {
                        adapter.Fill(ds);
                    }
                }
            }

            gv1.DataSource = ds;
            gv1.DataBind();
        }

        ///<summary>
        /// 放回一个SQLiteParameter
        ///</summary>
        ///<param name="name">参数名字</param>
        ///<param name="type">参数类型</param>
        ///<param name="size">参数大小</param>
        ///<param name="value">参数值</param>
        ///<returns>SQLiteParameter的值</returns>
        static private SQLiteParameter CreateSqliteParameter(string name,DbType type,int size,object value)
        {
            SQLiteParameter parm = new SQLiteParameter(name,type, size);
            parm.Value = value;
            return parm;
        }
    }
}
转载地址: http://www.cnblogs.com/genghechuang/archive/2011/10/20/2218853.html







  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值