c#连接sqlite数据库语句,c# 读取sqlite
当我们开发应用程序时,我们经常需要存储一些数据。存储的方式有很多种,使用数据库是比较流行的方式。但是对于一些小的应用,比如一些手机app,通常的数据库太大,轻量级的SQLite可以解决这个问题。不仅操作简单,而且只需要一个文件。在这里,我们来谈谈用C#语言操作SQLite数据库。
1.SQLite简介
SQLite是一个轻量级数据库,是一个符合ACID的关系数据库管理系统,包含在一个相对较小的C库中。它是由D.RichardHipp建立的公共领域项目,其设计目标是嵌入式,目前已经在很多嵌入式产品中使用。它占用的资源非常少。在嵌入式设备中,只有几百K的内存可能就足够了。可以支持Windows/Linux/Unix等主流操作系统。同时可以和很多编程语言结合,比如Tcl、C#、PHP、Java等。和ODBC接口。与MySQL和PostgreSQL这两个开源的世界著名的数据库管理系统相比,它的处理速度比它们都要快。
如果你想了解更多关于SQLite的信息,你可以访问它的官方网站:http://www.sqlite.org/.
2.开始前的准备
在开始之前,我们需要准备必要的开发环境。这一次,我们使用的是Visual Studio 2015开发环境,但我们只使用VS2015开发基于SQLite的应用是不够的。我需要从SQLite的官网下载安装SQLite。
在SQLite官网找到下载。有适用于各种环境的SQLite组件和源代码。我们选择预编译的二进制文件。NET,它应用于。NET开发环境。点击进入,你会看到各种版本适用于。NET2.0到4.6以及32位和64位平台。让我们只选择32位Windows的设置(。NET Framework 4.6)下载并安装。
3.C#操作SQLite的封装
在完成开发环境的准备后,我们将对SQLite操作进行必要的封装,进一步降低其在具体应用中的使用难度。这里我们只是封装了一些常用且必要的函数。
1个公共类SQLiteHelper
2 {
3 //创建数据库文件
4 public static void CreateDBFile(字符串文件名)
5 {
6字符串路径=系统。environment . current directory @ /Data/;
7如果(!目录。存在(路径))
8 {
9目录。创建目录(路径);
10 }
11字符串databaseFileName=路径文件名;
12如果(!文件。存在(数据库文件名))
13 {
14 SQLiteConnection。CreateFile(数据库文件名);
15 }
16 }
17
18 //生成连接字符串
19私有静态字符串CreateConnectionString()
20 {
21 SQLiteConnectionStringBuilder connectionString=new SQLiteConnectionStringBuilder();
22 connectionString。data source=@ data/script helper . db ;
23
24 string conStr=connectionString。ToString();
25 return conStr
26 }
27
28 ///摘要
29 ///处理插入数据库的空值
30////摘要
31 ///param name=value /param
32 ///returns /returns
33公共静态对象ToDbValue(对象值)
34 {
35如果(值==空)
36 {
37返回DBNull。价值;
38 }
其他39个
40 {
41返回值;
42 }
43 }
四十四
45 ///摘要
4///处理从数据库中读取的空值
47////摘要
48 ///param name=value /param
49 ///returns /returns
50公共静态对象FromDbValue(对象值)
51 {
52 if (value==DBNull。值)
53 {
54返回null
55 }
56其他
57 {
58返回值;
59 }
60 }
61
62 ///摘要
6///执行非查询数据库操作
64////摘要
6///param name= sqlstring 要执行的sql语句/param
6///param name= parameters 参数列表/param
6///returns返回受影响的文章/退货的数量
68 public static int ExecuteNonQuery(string sqlString,params SQLiteParameter[]参数)
69 {
70 string connectionString=CreateConnectionString();
71使用(SQLiteConnection conn=new SQLiteConnection(connectionString))
72 {
73 conn . Open();
74使用(SQLite命令cmd=conn . create命令())
75 {
76厘米深.CommandText=sqlString
77 foreach(参数中的SQLiteParameter参数)
78 {
79厘米深.参数。添加(参数);
80 }
81返回cmd .ExecuteNonQuery();
82 }
83 }
84 }
85
86 ///摘要
87 ///执行查询并返回查询结果第一行第一列
88////摘要
89 ///param name=sqlString SQL语句/param
90 ///param name=sqlparams 参数列表/param
91 ///返回/返回
92公共静态对象ExecuteScalar(string sqlString,params SQLiteParameter[]参数)
93 {
94 string connectionString=CreateConnectionString();
95使用(SQLiteConnection conn=new SQLiteConnection(connectionString))
96 {
97 conn . Open();
98使用(SQLite命令cmd=conn . create命令())
99 {
100厘米CommandText=sqlString。
101 foreach(参数中的SQLiteParameter参数)
102 {
103厘米深.参数。添加(参数);
104 }
105返回cmd .ExecuteScalar();
106 }
107 }
108 }
109
110 ///摘要
111 ///查询多条数据
112////摘要
113 ///param name=sqlString SQL语句/param
114 ///param name=parameters 参数列表/param
115 ///返回返回查询的数据表/退货
116公共静态数据表GetDataTable(string sqlString,params SQLiteParameter[]参数)
117 {
118 string connectionString=CreateConnectionString();
119使用(SQLiteConnection conn=new SQLiteConnection(connectionString))
120 {
121 conn . Open();
122使用(SQLite命令cmd=conn . create命令())
123 {
124厘米深.CommandText=sqlString
125 foreach(参数中的SQLiteParameter参数)
126 {
127厘米深.参数。添加(参数);
128 }
129 DataSet ds=new DataSet();
130 sqlitedatadapter=新的sqlitedatadapter(cmd);
131适配器。填充(ds);
132返回ds .表[0];
133 }
134 }
135 }
136 }4、应用实例
上面封装完了之后,我们就是使用上面封装的函数来实际操作数据库数据库。对数据库的应用实例无非就是对各种对象的增、删、改、查。我没列举一个对源码类型对象的各种操作实例如下:
一个公共类ScriptTypeDAL
2 {
3公共脚本typem ToScriptType(DataRow行)
4 {
5 script typem type=新脚本typem();
6型ScriptTypeId=(Guid)行[ script typeid ];
七型脚本类型=(字符串)行[脚本类型];
8型I susing=(bool)row[ I susing ];
9返回式;
10 }
11
12公共空的插入(ScriptTypeM类型)
13 {
14 SQLiteHelper .ExecuteNonQuery(@ 插入TB_ScriptType(ScriptTypeId,ScriptType,IsUsing)
15个值(@ScriptTypeId,@ScriptType,1),
16新的SQLiteParameter(ScriptTypeId ,类型ScriptTypeId),
17新的SQLiteParameter(ScriptType ,类型.脚本类型));
18
19 }
20
21公共空的更新(ScriptTypeM类型)
22 {
23 SQLiteHelper .ExecuteNonQuery(@ update TB _ script type set script type=@ script type
24 I susing=@ I susing where script typeid=@ script typeid,
25新的SQLiteParameter(ScriptType ,类型ScriptType),
26新的SQLiteParameter( I using ,类型我使用),
27新的SQLiteParameter(ScriptTypeId ,类型script typeid));
28 }
29
30公共ScriptTypeM GetbyId(Guid id)
31 {
32 DataTable table=SQLiteHelper .get datatable( select * from TB _ script type where script typeid=@ id ,
33新的SQLiteParameter(id ,id));
34如果(表。行数。计数=0)
35 {
36返回空
37 }
38 else if(表。行数。计数1)
39 {
40抛出新异常( Id重复!);
41 }
其他42个
43 {
44返回到脚本类型(表. rows[0]);
45 }
46 }
47
48 public ScriptTypeM GetbyName(字符串名)
49 {
50数据表table=SQLiteHelper .get datatable( select * from TB _ script type where script type=@ name ,
51新的SQLiteParameter(name ,name));
52如果(表。行数。计数=0)
53 {
54返回空
55 }
56 else if(表。行数。计数1)
57 {
58抛出新异常(类型名称重复!);
59 }
其他60个
61 {
62返回到脚本类型(表. rows[0]);
63 }
64 }
65
66 public ScriptTypeM[] ListAll()
67 {
68数据表table=SQLiteHelper .获取datatable( select * from TB _ script type where I using=1 );
69脚本类型m[]类型=新脚本类型m[表.行。计数];
70 for(int I=0;我表。行数。计数;我)
71 {
72 type[i]=ToScriptType(表。rows[I]);
73 }
74返回式;
75 }
76
77 public script typem[]Search(string SQL,List SQLiteParameter parameter List)
78 {
79 DataTable table=SQLiteHelper。GetDataTable(sql,parameterList。ToArray());
80 script typem[]type=new script typem[table。rows . Count];
81 for(int I=0;我表。行数。计数;我)
82 {
83 type[i]=ToScriptType(表。rows[I]);
84 }
85返回式;
86 }
87 }SQLite数据库小巧易用,在一些小型应用和嵌入式应用中有优势。当然,如何轻松使用,还是要看个人。
想更方便及时的阅读相关文章,请关注我的微信微信官方账号【木南创智】
转载请联系作者取得转载授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。