SQLite简单使用

厌烦了SQL Server的系统服务和臃肿的安装文件。。又不想用MySQL,于是开启了SQLite的坑

总的来说还是不错,SQLite对一些SQL语法只提供有限的支持,太复杂的操作需要重新建表。网上说10万条以下数据SQLite都不在话下。so,小型的数据库再合适不过了

这里示范以下SQLite的本地读写

相关链接

====================================================================

SQLite操作软件推荐 SQLiteSpy

SQL语句的研究可以看W3School的教程:http://www.w3school.com.cn/sql/

SQLite的下载和文档,可以去官网:http://www.sqlite.org/

SQLite操作示例

(注:示范的例子是我封装的一个类里的函数)

====================================================================

using System.Data.SQLite;

首先在引用完Dll之后,引用上面这个命名空间

SQLiteDataReader类的实例,可以保存读到的数据,进行操作

SQLiteConnection类的实例,和连接硬盘上的数据库文件有关。

SQLiteConnectionStringBuilder这个类听名字应该是构建器之类的,只会导入数据的时候用一次,一般不会用到。

下面的示例都和这3个类有关

1.打开数据库文件

public SQLiteConnection SqliteInit(string path)
{
    SQLiteConnection result = new SQLiteConnection();
    SQLiteConnectionStringBuilder connstr = new SQLiteConnectionStringBuilder();

    connstr.DataSource = path;
    result.ConnectionString = connstr.ToString();
    result.Open();

    return result;
}

返回的实例类似控制连接的句柄。如果同时连接多个数据库,可能会有多个这样的句柄吧

2.SQL语句

public SQLiteDataReader GetSqlDataReader(string sqlCmd, SQLiteConnection conn)
{
    SQLiteDataReader result = null;
    SQLiteCommand cmd = new SQLiteCommand();
    cmd.CommandText = sqlCmd;
    cmd.Connection = conn;
    cmd.ExecuteNonQuery();

    result = cmd.ExecuteReader();

    return result;
}

sqlCmd参数就是SQL语句。那么要怎么通过SQLiteDataReader来读取呢?。下面演示

3.读取SQLiteDataReader的数据

public string[,] GetTableDatas(string tableName, string[] colNames)
{
    string[,] result = null;
    List<string[]> datas = new List<string[]>();

    SQLiteDataReader reader = GetSqlDataReader("SELECT * FROM "+tableName, mConnect);

    while (reader.Read())
    {
        string[] tmp = new string[colNames.Length];
        for (int i = 0; i < colNames.Length; i++)
        {
            tmp[i] = reader[colNames[i]].ToString();
        }

        datas.Add(tmp);
    }

    result = new string[datas.Count, colNames.Length];

    for (int i = 0; i < datas.Count; i++)
    {
        for (int j = 0; j < colNames.Length; j++)
        {
            result[i, j] = datas[i][j];
        }
    }

    return result;
}

这个函数写的不是很好,只供参考。

假设表里有一个名为Name的列,可以这样写reader["Name"].Getxxx();

它支持索引器

常用SQL语句介绍

===============================================================

多行的数据都需要加分号,我的SQL语句语法约定: 所有SQL操作关键字一律大写

//插入数据  按照列从左往右的顺序插入.

INSERT INTO 表名 VALUES('Jack','200')

//取出一个表的数据

SELECT * FROM 表名

//创建表

CREATE TABLE 表名(列名1 varchar(20),列名2 varchar(20))

//删除表
DROP TABLE 表名

//在表中插入一列数据
ALTER TABLE 表名 ADD 列名 VARCHAR(20)

//不删除表的情况下,删除所有行

DELETE FROM 表名

//删除一行数据. where后的为条件,下面的例子中,如果Name列中有一个数据叫Jack,就会被删除.
DELETE FROM 表名 WHERE Name='Jack';

//多条件. AND就是&&, OR就是||
DELETE FROM 表名 WHERE Name='Jack' AND Lv='200'

//排序
SELECT * FROM 表名 ORDER by 列名

//修改数据  通常用于集体修改  这里演示把 Name列为 "Jack"的值 全部修改为“None”

UPDATE 表名 SET Name = 'None' WHERE Name = 'Jack'

//选择最后一行数据

SELECT top 1 * FROM [MyTable] ORDER BY [id] DESC

//模糊查询(%类似*,_类似?)

SELECT * FROM 表名 WHERE Name LIKE '%Jack%'

//多表查询(通过第一张表存的ID读到第二张表映射的真实姓名)

SELECT b.realName, a.value, a.goods FROM [MyTable1] a, [MyTable2] b WHERE a.id = b.id

//以主键id作为参考,选择其中10-50

SELECT TOP 50 * FROM 表名 WHERE id NOT IN(SELECT TOP 10 id FROM 表名)

原文地址:https://www.cnblogs.com/hont/p/3092222.html