SQLITE在ASP.NET中的应用

在asp.net web 程序中使用Sqlite数据库 本文介绍了如何在asp.net web 程序中使用Sqlite嵌入式数据库,sqlite数据库可以作为文件放在站点的APP_DATA目录下,适合小网站使用,使用它不需要买sql server空间,而且据说它的性能很不错。

Sqlite是嵌入数据库,类似与MS Sql Server Compact,之所以不用Sql server compact是因为它既不支持SELECT TOP也不支持ROW_NUMBER()还不支持LIMIT,也就是我没有办法用它分页了,取数据的时候必须根据条件取,不能在给定条件下取n条。

1. 安装Sqlite数据库,sqlite数据库非常方便,他的安装只有一个exe文件,可以下载。

下载可执行文件之后使用命令“sqlite3 dbname”执行就可以创建数据库。

或者为了开发方便下载Sqlite Developer软件,使用软件创建也有方便。下载链接

2. 安装dot net下的Sqlite数据库驱动,其实就是一个dll,System.Data.SQLite,他是一个开源项目,可以到SourceForge上下载

3. 在VS中建立一个Web Application,并引用2中的dll

4. 在default.aspx的cs文件中实现访问Sqlite的代码,代码和注释如下:


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();
        }

        /**////
        /// 放回一个SQLiteParameter
        ///

        /// 参数名字
        /// 参数类型
        /// 参数大小
        /// 参数值
        /// SQLiteParameter的值
        static private SQLiteParameter CreateSqliteParameter(string name,DbType type,int size,object value)
        {
            SQLiteParameter parm = new SQLiteParameter(name,type, size);
            parm.Value = value;
            return parm;
        }
    }
}


最后希望的MS Sql Server Compact可以做一些改进,让我们可以舒服的使用。


1. DLL下载地址
 
  http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki

2. Add Reference System.Data.SQLite.dll
   using System.Data.SQLite
   把SQLite.Interop.dll放到可执行文件的相同目录下
 
3. 代码

using System;

using System.Collections.Generic;

using System.Data;

using System.Data.SQLite;

//using System.Windows.Forms;

 

class Program

{

    

    public static void Main()

    {

        SQLiteDatabase sqlite = new SQLiteDatabase();

 

        sqlite.ExecuteNonQuery("create table datas(name text)");

        sqlite.ExecuteNonQuery("insert into datas values('hello')");

        DataTable dt = sqlite.GetDataTable("select * from datas");

        Console.WriteLine(dt.Rows[0][0].ToString());

    }

}

 

class SQLiteDatabase

{

    String dbConnection;

 

    ///

    ///     Default Constructor for SQLiteDatabase Class.

    ///


    public SQLiteDatabase()

    {

        dbConnection = "Data Source=recipes.s3db";

    }

 

    ///

    ///     Single Param Constructor for specifying the DB file.

    ///


    /// The File containing the DB

    public SQLiteDatabase(String inputFile)

    {

        dbConnection = String.Format("Data Source={0}", inputFile);

    }

 

    ///

    ///     Single Param Constructor for specifying advanced connection options.

    ///


    /// A dictionary containing all desired options and their values

    public SQLiteDatabase(Dictionary connectionOpts)

    {

        String str = "";

        foreach (KeyValuePair row in connectionOpts)

        {

            str += String.Format("{0}={1}; ", row.Key, row.Value);

        }

        str = str.Trim().Substring(0, str.Length - 1);

        dbConnection = str;

    }

 

    ///

    ///     Allows the programmer to run a query against the Database.

    ///


    /// The SQL to run

    /// A DataTable containing the result set.

    public DataTable GetDataTable(string sql)

    {

        DataTable dt = new DataTable();

        try

        {

            SQLiteConnection cnn = new SQLiteConnection(dbConnection);

            cnn.Open();

            SQLiteCommand mycommand = new SQLiteCommand(cnn);

            mycommand.CommandText = sql;

            SQLiteDataReader reader = mycommand.ExecuteReader();

            dt.Load(reader);

            reader.Close();

            cnn.Close();

        }

        catch (Exception e)

        {

            throw new Exception(e.Message);

        }

        return dt;

    }

 

    ///

    ///     Allows the programmer to interact with the database for purposes other than a query.

    ///


    /// The SQL to be run.

    /// An Integer containing the number of rows updated.

    public int ExecuteNonQuery(string sql)

    {

        SQLiteConnection cnn = new SQLiteConnection(dbConnection);

        cnn.Open();

        SQLiteCommand mycommand = new SQLiteCommand(cnn);

        mycommand.CommandText = sql;

        int rowsUpdated = mycommand.ExecuteNonQuery();

        cnn.Close();

        return rowsUpdated;

    }

 

    ///

    ///     Allows the programmer to retrieve single items from the DB.

    ///


    /// The query to run.

    /// A string.

    public string ExecuteScalar(string sql)

    {

        SQLiteConnection cnn = new SQLiteConnection(dbConnection);

        cnn.Open();

        SQLiteCommand mycommand = new SQLiteCommand(cnn);

        mycommand.CommandText = sql;

        object value = mycommand.ExecuteScalar();

        cnn.Close();

        if (value != null)

        {

            return value.ToString();

        }

        return "";

    }

 

    ///

    ///     Allows the programmer to easily update rows in the DB.

    ///


    /// The table to update.

    /// A dictionary containing Column names and their new values.

    /// The where clause for the update statement.

    /// A boolean true or false to signify success or failure.

    public bool Update(String tableName, Dictionary data, String where)

    {

        String vals = "";

        Boolean returnCode = true;

        if (data.Count >= 1)

        {

            foreach (KeyValuePair val in data)

            {

                vals += String.Format(" {0} = '{1}',", val.Key.ToString(), val.Value.ToString());

            }

            vals = vals.Substring(0, vals.Length - 1);

        }

        try

        {

            this.ExecuteNonQuery(String.Format("update {0} set {1} where {2};", tableName, vals, where));

        }

        catch

        {

            returnCode = false;

        }

        return returnCode;

    }

 ///

    ///     Allows the programmer to easily delete rows from the DB.

    ///


    /// The table from which to delete.

    /// The where clause for the delete.

    /// A boolean true or false to signify success or failure.

    public bool Delete(String tableName, String where)

    {

        Boolean returnCode = true;

        try

        {

            this.ExecuteNonQuery(String.Format("delete from {0} where {1};", tableName, where));

        }

        catch (Exception fail)

        {

            Console.WriteLine(fail.Message);

            returnCode = false;

        }

        return returnCode;

    }

 

    ///

    ///     Allows the programmer to easily insert into the DB

    ///


    /// The table into which we insert the data.

    /// A dictionary containing the column names and data for the insert.

    /// A boolean true or false to signify success or failure.

    public bool Insert(String tableName, Dictionary data)

    {

        String columns = "";

        String values = "";

        Boolean returnCode = true;

        foreach (KeyValuePair val in data)

        {

            columns += String.Format(" {0},", val.Key.ToString());

            values += String.Format(" '{0}',", val.Value);

        }

        columns = columns.Substring(0, columns.Length - 1);

        values = values.Substring(0, values.Length - 1);

        try

        {

            this.ExecuteNonQuery(String.Format("insert into {0}({1}) values({2});", tableName, columns, values));

        }

        catch (Exception fail)

        {

            Console.WriteLine(fail.Message);

            returnCode = false;

        }

        return returnCode;

    }

 

    ///

    ///     Allows the programmer to easily delete all data from the DB.

    ///


    /// A boolean true or false to signify success or failure.

    public bool ClearDB()

    {

        DataTable tables;

        try

        {

            tables = this.GetDataTable("select NAME from SQLITE_MASTER where type='table' order by NAME;");

            foreach (DataRow table in tables.Rows)

            {

                this.ClearTable(table["NAME"].ToString());

            }

            return true;

        }

        catch

        {

            return false;

        }

    }

 

    ///

    ///     Allows the user to easily clear all data from a specific table.

    ///


    /// The name of the table to clear.

    /// A boolean true or false to signify success or failure.

    public bool ClearTable(String table)

    {

        try

        {

 

            this.ExecuteNonQuery(String.Format("delete from {0};", table));

            return true;

        }

        catch

        {

            return false;

        }

    }

}

你可能感兴趣的:(DOTNET)