最近做一个数控系统的项目,winCE嵌入式操作系统+.Net Compact Framework环境+VS2008开发平台,开发的设备程序部署到winCE系统下的设备中运行。。
SQLite,是一款开源轻型的文件型数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于年月。至年已经有个年头,SQLite也迎来了一个版本 SQLite 3已经发布。
(ACID,指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。一个支持事务(Transaction)的,必需要具有这四种特性,否则在事务过程(Transaction processing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求。)
工作原理
不像常见的客户-服务器范例,SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分。所以主要的通信协议是在编程语言内的直接API调用。这在消耗总量、延迟时间和整体简单性上有积极的作用。整个数据库(定义、表、索引和数据本身)都在宿主主机上存储在一个单一的文件中。它的简单的设计是通过在开始一个事务的时候锁定整个数据文件而完成的。
使用.NET操作SQLLITE
先下载ADO.NET2.0 Provider for SQLite。下载binarieszip版就可以了。下载完后解压缩,可以在bin目录下找到System.Data.SQLite.DLL。
在vs2008中用Add Reference(添加引用)功能把System.Data.SQLite.DLL加到工程里就可以了。
运行下面代码试试:
由于SQLite是个文件型 数据库,判断机器中是否有某个数据库,直接判断是否有此文件即可。
1、如果存在,
if (System.IO.File.Exists("\\Hard Disk\\PressBreak.db3"))
{
cnn = new SQLiteConnection();
cnn.ConnectionString = "Data Source = \\Hard Disk\\PressBreak.db3;Password = Sunkz";
cnn.Open();
return true;
}
2、如果不存在
//创建一个数据库文件
string datasource = "\\Hard Disk\\PressBreak.db3";
System.Data.SQLite.SQLiteConnection.CreateFile(datasource); //连接数据库
cnn = new SQLiteConnection();
cnn.ConnectionString = "Data Source = \\Hard Disk\\PressBreak.db3;Password = Sunkz";//设置密码,SQLiteADO.NET实现了数据库密码保护
cnn.Open();
System.Data.SQLite.SQLiteCommand cmd = new System.Data.SQLite.SQLiteCommand();
//创建表
string sql = "CREATE TABLE test(username varchar(20),password varchar(20))";
cmd.CommandText = sql;
cmd.Connection = conn;
cmd.ExecuteNonQuery();
//插入数据
sql = "INSERT INTO test VALUES('a','b')";
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
或者:InsertSql="INSERT INTO PunchData(Id,Height, Angle, Radius, Strength) VALUES('{0}',{1},{2},{3},{4})";
cmd.CommandText=string.Format(InsertSql, punchData .Id , punchData.height.ToString(), punchData.angle.ToString(), punchData.radius.ToString(), punchData.strength.ToString());
cmd.ExecuteNonQuery();
此处注意,单引号的使用,字段为字符串类型的话,要加单引号。
//取出数据
sql = "SELECT * FROM test";
cmd.CommandText = sql;
System.Data.SQLite.SQLiteDataReader reader =cmd.ExecuteReader();
StringBuilder sb = new StringBuilder();
while (reader.Read())
{
sb.Append("username:").Append(reader.GetString(0)).Append("\n")
.Append("password:").Append(reader.GetString(1));
}
MessageBox.Show(sb.ToString());
另附SQLite学习网站:http://www.w3cschool.cc/sqlite/sqlite-intro.html