一、关于sqlite ADO.NET[转]
System.Data.sqlite
是一个原始sqlite的加强版. 它将是一个原版的sqlite3.dll完全替代品 (你甚至就可以把它重命名为sqlite3.dll). 它不需要链接.NET 运行时,所以可以脱离.NET独立发布,然而它内嵌了一个完整的 ADO.NET 2.0 引擎,为开发提供了完整的支持.
以下是它的特性简介:
完整的 ADO.NET 2.0 实现
整个工程完全基于VS2005 和 ADO.NET 2.0全新构建,使用了全部的ADO.NET framework新特性. 包括完整的 DbProviderFactory 支持,自动的分布式事务调用,广泛的模式支持,此外所有的类都是从 ADO.NET 2.0 的基类继承下来的.
支持完整和精简的 .NET Framework 以及 C/C++
这个库不需要链接依赖.NET运行时,100%兼容原始的sqlite3.dll,可以使用非托管的C/C++ 进行开发.
可移植的数据库文件
未加密的 sqlite 数据库文件可以自由的跨平台和处理器使用,包括非Windows平台. 加密之后的数据库可以在全部Windows平台上使用.
可以信赖的速度,比包括sql Server Mobile 在内的其它大多数嵌入式数据库都要快速
sqlite'安装所占用的空间相对于sql Mobile可谓忽略不计了. 它在运行的时候占用更少的内存,同时生成的数据库也更小.
数据库加密
可以对整个数据库文件进行加密. 支持二进制和明文的密码.
支持使用Visual Studio 2005 设计
你可以向Server Explorer添加一个sqlite 连接,使用查询设计器创建处查询语句,向一个数据集中拖拽一个表格等等! sqlite的开发者可以在包括体验版在内的各种Visual Studio 2005下工作.
单文件再发布包容量在400kb以下
将sqlite本身和ADO.NET 封装捆绑编译在一起. 预编译的二进制文件提供了 x86,IA64,x64 和ARM 的版本.
广泛的sql语言支持
sqlite 支持大部分的sql92 标准(see below). 支持命名和未命名的参数以 UTF-8 和UTF-16 编码通过优化的管道传入sqlite 内核.
用户自定义的函数 和 排序
全面支持用户自定义函数和排序方式,意味着你可以用自己喜欢的.NET语言来实现sqlite没有提供的特性. 这一切将非常的简单.
提供了全部的源代码. 100% 免费.
全部的封装库源代码都是公有的. 无论是个人还是商业应用都没有任何的协议约束.
主页地址:http://sqlite.phxsoftware.com/
下载地址(最新版本1.0.38.0):http://sourceforge.net/project/showfiles.php?group_id=132486&package_id=145568
这个提供程序更重要的是提供了ADO.NET vNext支持:http://sqlite.phxsoftware.com/blogs/sqlite/archive/2006/09/06/1949.aspx
二、在C#中使用sqlite
1、通过Add References引用sqlite ADO .NET安装目录的bin目录下的System.Data.sqlite.DLL。
2、创建数据库文件:因为始终是个0字节文件,应该利用IO也可以(?!)。
3、连接数据库
connectionString中包含了数据库的一些配置信息,比如数据库文件,数据库打开的密码等,可以利用System.Data.sqlite.sqliteConnectionStringBuilder来辅助创建connectionString
4、创建表、读取数据等和Access或MS sql没多大区别了
// 创建一个数据库文件
string datasource = " h:/test.db " ;
System.Data.sqlite.sqliteConnection.CreateFile(datasource);
// 连接数据库
System.Data.sqlite.sqliteConnectionconn = new System.Data.sqlite.sqliteConnection();
System.Data.sqlite.sqliteConnectionStringBuilderconnstr = new System.Data.sqlite.sqliteConnectionStringBuilder();
connstr.DataSource = datasource;
connstr.Password = " admin " ; // 设置密码,sqliteADO.NET实现了数据库密码保护
conn.ConnectionString = connstr.ToString();
conn.Open();
// 创建表
System.Data.sqlite.sqliteCommandcmd = new System.Data.sqlite.sqliteCommand();
string sql = " CREATETABLEtest(usernamevarchar(20),passwordvarchar(20)) " ;
cmd.CommandText = sql;
cmd.Connection = conn;
cmd.ExecuteNonQuery();
// 插入数据
sql = " INSERTINTOtestVALUES('ekinglong','mypassword') " ;
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
// 取出数据
sql = " SELECT*FROMtest " ;
cmd.CommandText = sql;
System.Data.sqlite.sqliteDataReaderreader = cmd.ExecuteReader();
StringBuildersb = new StringBuilder();
while (reader.Read())
{
sb.Append("username:").Append(reader.GetString(0)).Append("\n")
.Append("password:").Append(reader.GetString(1));
}
MessageBox.Show(sb.ToString());