C#操作Sqlite数据库,包括创建、增、删、查、改、追加字段内容、实用操作及使用事务批量处理数据库

C#操作Sqlite数据库,包括创建、增、删、查、改、追加字段内容、实用操作及使用事务批量处理数据库

一、添加引用

创建Sqlite数据库之前首先要把相应的dll放到程序生成目录下,然后在项目中添加引用即可。

①、System.Data.SQLite.dll和SQLite.Interop.dll相关dll放到程序生成目录下

②、using System.Data.SQLite;//添加引用

③、往程序中添加我提前写好的几个数据库执行方法,以后类似的操作直接调用本方法即可。

private void SqliteExecute(string path, string sql)

{

            SQLiteConnection connect = new SQLiteConnection("Data Source = " + path);//创建连接

            connect.Open();//打开数据库

            SQLiteCommand cmdCreateTable = new SQLiteCommand(sql, connect);

            cmdCreateTable.ExecuteNonQuery();//执行语句

            cmdCreateTable.Dispose();

            connect.Close(); //关闭数据库

}

//获取数据库中某个表的数据并保存到DataTabe中,如果表中有零条记录,就返回false,如果有记录,返回true,代表相应的DataTable是否为空。

private bool GetTable(string path, string sql, out DataTable dataTable)

{

            SQLiteConnection connect = new SQLiteConnection("Data Source = " + path);

            connect.Open();

            SQLiteDataAdapter sQLiteDataAdapter = new SQLiteDataAdapter(sql, connect);

            dataTable = new DataTable();

            sQLiteDataAdapter.Fill(dataTable);

            sQLiteDataAdapter.Dispose();

            connect.Dispose();

            int count = dataTable.Rows.Count;

            if (count > 0)

                return true;

            else

                return false;

}

二、创建Sqlite数据库

创建Sqlite数据库只需要创建相应的表即可,下面以创建学生所在城市数据库为例,程序如下:

①、string  fileName = string.format("D://TextSqlite//{0}", Student.db);//注意sqlite数据库文件是以.db为后缀的

②、string sql = "create table if not exists StudentInfo (Name Text char(256) primary key, City Text char(256))";

//创建名字为StudentInfo的表,表中有NameCity两个字段,并指定以Name为主键。也可以不指定主键,单纯创建两个字段,或者可以写成

string sql = "create table if not exists StudentInfo (Name char(256), City char(256))";

③、SqliteExecute(fileName, sql); //调用数据库执行语句,创建数据库成功

三、往数据库插入一条记录

下面往StudentInfo表中增加一条记录,NameLiMingCity80,例如:

①、string name = "LiMing";

②、string sql = "insert into StudentInfo (Name, City) values ('"+ name +"', '"+ "Beijing" +"')";

③、SqliteExecute(fileName, sql);

现在已经往数据库相应表中插入一条记录了,需要注意的是在对各个字段赋值的时候,例如上面括号中   '"+ "LiMing" +"'   的格式为:最外面是一层单引号,中间是一层双引号,最里面是两个加号,两个加号中间是字段的值。

四、数据库中删除一条记录

下面以删除StudentInfo表中Name"Dany"的所有记录,例如:

①、string name = "Dany";

②、string sql = "delete from StudentInfo where Name = '"+ name +"'";

③、SqliteExecute(fileName, sql);

即可实现删除表中符合条件的所有项,如果删除的条件限制较多的话,只需在Where后面加以and为分隔的条件就行,比如:

string sql = "delete from StudentInfo where Name = '"+ name +"' and City = '"+ "Tianjin" +"'";就可以删除表中所有Name"Dany"并且City"Tianjin"的所有项。

五、查找操作

数据库查找往往会把结果保存到DataTable中,便于程序方便处理,下面以查找表中所有Name"Dany"的记录,例如:

①、string name = "Dany";

②、string sql = "select * from StudentInfo where Name = '"+ name +"'";//后面也可以加更多限制条件

③、if (GetTable(fileName, sql, out DataTable dataTable))

{

            List<string> citys = new List<string>();//遍历dataTable把所有城市保存在一个列表中

            foreach (DataRow dataRow in dataTable.Rows)

            {

                        if(dataRow["City"] != null && dataRow["City"].ToString() != "")

                        {

                                    //加入前一定要判断表中字段是否为空和对其值做防呆,否则可能导致程序出问题

                                    citys.add(dataRow["City"].ToString());

                        }

            }

}

六、数据库内容修改

修改语句为update,下面把表中Name"Dany"City修改为"Shenzhen",例如:

①、string name = "Dany", city = "Shenzhen";

②、string sql = "update StudentInfo set City = '"+ city +"' where Name = '"+ name +"'";

③、SqliteExecute(fileName, sql);

七、追加字段

追加字段语句同update,只在要追加的字段加 || 即可,比如往表中Name"Dany"City字段中追加City"Guangzhou",例如:

①、string name = "Dany", city = "Guangzhou";

②、string sql = "update StudentInfo set City = City || '"+ city +"' where Name = '"+ name +"'";

③、SqliteExecute(fileName, sql);

格式为: set 字段 = 字段 || '"+  city +"'   ,即可实现在字段City中追加"Guangzhou"的内容,原来City值为"Shenzhen"的话,现在值为"ShenzhenGuangzhou".

八、实用操作

sql语句中的replace语句很灵活,可以实现插入和更新两个功能,如果有记录则更新,没有则插入。

下面以往StudentInfo表中插入Name"Dany"City"Shenzhen"的一条记录,例如:

①、string name = "Dany";

②、string sql = "replace into StudentInfo (Name, City) values ('"+ name +"', '"+ "Shenzhen" +"')";

③、SqliteExecute(fileName, sql);

//程序实现效果为,如果表中存在以Name"Dany"的记录,则更新其City"Shenzhen"。如果没有记录,则实现和插入操作一样的功能。

九、利用事务批量处理

批量处理操作中,步骤为只需要开启事务、提交事务、执行即可,操作数据库方法和上面不太一样,在VS中按照提示添加相应的引用即可。下面以往数据库中插入1万条记录为例,展现批量处理的过程。

①、string sql;

②、DbProviderFactory dbFactory = SQLiteFactory.Instance;

③、using (DbConnection conn = dbFactory.CreateConnection())

{

              conn.ConnectionString = "Data Source = " + fileName;

              conn.Open();//打开数据库

              DbCommand cmd = conn.CreateCommand();

              DbTransaction trans = conn.BeginTransaction();//开启事务,必要的操作

              for(int i = 0; i < 10000; i++)

              {

                           sql = "replace into StudentInfo (Name, City) values ('" + i + "', '" + i + "')";

                           cmd.CommandText = sql;

                           cmd.ExecuteNonQuery();

               }

               trans.Commit();

               conn.Close();

}

程序中每一句具体的意思我还没深究,只需要能出色的实现自己想要的功能即可。如果不用事务的话,要插入10000条记录需要很长的时间,而现在只需眨眼的功夫即可实现。具体快多少倍咱们在这就不深究了,因为效果是显而易见的。如有在工作中遇到新的操作后面还会更新。

十、计算数据库中选择某一列不重复的值。这个问题可以使用简单的方法,即循环遍历数据库的每一行,计算不重复的值。但是C#给我们提供了更好的方法,DataView表示用于排序、筛选、搜索、编辑和导航的 DataTable 的可绑定数据的自定义视图,如下所示:

            Select(file, sql, out DataTable dataTable);//把数据库信息放到DataTable里面

            DataView dataView = dataTable.DefaultView;

            DataTable dataTable1 = new DataTable();

            dataTable1 = dataView.ToTable(false, "xxx");//第一个参数设置为True时,是选择不重复的值。设置为False时,得到所有的值,相当于把某一列单独放到了一个DataTable里面。

            dataGridView2.DataSource = dataTable1;//可视化显示出来

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351

推荐阅读更多精彩内容