厌烦了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 表名)