【转】在C#中使用SQLite

SQLite 是一个嵌入式的关系数据库系统,使用十分广泛。在一些数据量不大的应用程序中,如果使用SQLite可以极大的减少部署时的工作量。 要在C#中使用SQLite也很简单,只要找一个C#的wrapper就可以了,例如,我使用的就是来自

http://sqlite.phxsoftware.com/  的一个dll,System.Data.SQLite. 下载下来的文件是SQLite-1.0.65.0-setup.exe。只要安装一下就可以使用了,非常方便。该程序符合ADO.NET的规范,并且支持Visual Studio的可视化表设计器。

打开Visual Studio 2008,新建一个Console Application,为此项目添加System.Data.SQLite的引用。添加一个数据库连接,此时可以发现,新建连接中有了一个SQLite Database Connection,选择此类型的数据连接,并且新建一个文件,

test.db3. 接下来在新数据库中添加一张表,如下:

tt

下面开始为此表建立一个Data Access类,以展示在C#中如何使用SQLite,可以想象,和操作其他数据库是几乎一样的,感谢ADO.NET的功劳。

首先是一个实体类 Book.cs:

public class Book
    {
        private int id;
        private string bookName;
        private decimal price;

        public int ID
        {
            get { return id; }
            set { id = value; }
        }
        public string BookName
        {
            get { return bookName; }
            set { bookName = value; }
        }
        public decimal Price
        {
            get { return price; }
            set { price = value; }
        }
    }

编写DAL类:

using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SQLite;

namespace ConsoleApplication1
{
    public class BookDAL
    {
        public static bool Create(Book book)
        {
            try
            {
                using (SQLiteConnection conn = new SQLiteConnection("Data Source=e:\\test.db3"))
                {
                    conn.Open();
                    SQLiteCommand cmd = conn.CreateCommand();
                    cmd.CommandText = "insert into Book values(@ID,@BookName,@Price);";
                    cmd.Parameters.Add(new SQLiteParameter("ID", book.ID));
                    cmd.Parameters.Add(new SQLiteParameter("BookName", book.BookName));
                    cmd.Parameters.Add(new SQLiteParameter("Price", book.Price));
                    int i = cmd.ExecuteNonQuery();
                    return i == 1;
                }
            }
            catch (Exception)
            {
                //Do any logging operation here if necessary
                return false;
            }
        }

        public static bool Update(Book book)
        {
            try
            {
                using (SQLiteConnection conn = new SQLiteConnection("Data Source=e:\\test.db3"))
                {
                    conn.Open();
                    SQLiteCommand cmd = conn.CreateCommand();
                    cmd.CommandText = "update Book set BookName=@BookName,Price=@Price where ID=@ID;";
                    cmd.Parameters.Add(new SQLiteParameter("ID", book.ID));
                    cmd.Parameters.Add(new SQLiteParameter("BookName", book.BookName));
                    cmd.Parameters.Add(new SQLiteParameter("Price", book.Price));
                    int i = cmd.ExecuteNonQuery();
                    return i == 1;
                }
            }
            catch (Exception)
            {
                //Do any logging operation here if necessary
                return false;
            }
        }

        public static bool Delete(int ID)
        {
            try
            {
                using (SQLiteConnection conn = new SQLiteConnection("Data Source=e:\\test.db3"))
                {
                    conn.Open();
                    SQLiteCommand cmd = conn.CreateCommand();
                    cmd.CommandText = "delete from Book where ID=@ID;";
                    cmd.Parameters.Add(new SQLiteParameter("ID", ID));        
                    int i = cmd.ExecuteNonQuery();
                    return i == 1;
                }
            }
            catch (Exception)
            {
                //Do any logging operation here if necessary
                return false;
            }
        }

        public static Book GetbyID(int ID)
        {
            try
            {
                using (SQLiteConnection conn = new SQLiteConnection("Data Source=e:\\test.db3"))
                {
                    conn.Open();
                    SQLiteCommand cmd = conn.CreateCommand();
                    cmd.CommandText = "select * from Book where ID=@ID;";
                    cmd.Parameters.Add(new SQLiteParameter("ID", ID));
                    SQLiteDataReader dr = cmd.ExecuteReader();
                    if (dr.Read())
                    {
                        Book book = new Book();
                        book.ID = dr.GetInt32(0);
                        book.BookName = dr.GetString(1);
                        book.Price = dr.GetDecimal(2);
                        return book;
                    }
                    else
                        return null;
                }
            }
            catch (Exception)
            {
                //Do any logging operation here if necessary
                return null;
            }
        }
    }
}

编写测试主程序:

using System;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Book book = new Book();
            book.ID = 1;
            book.BookName = "Book A";
            book.Price = 10.0m;
            BookDAL.Create(book);

            book.ID = 2;
            book.BookName = "第二本书";
            book.Price = 13.0m;
            BookDAL.Create(book);

            book = BookDAL.GetbyID(2);
            Console.WriteLine(book.ID + " " + book.BookName + " " + book.Price);

            book.Price = 11.1m;
            BookDAL.Update(book);

            book = BookDAL.GetbyID(2);
            Console.WriteLine(book.ID + " " + book.BookName + " " + book.Price);
            book = BookDAL.GetbyID(1);
            Console.WriteLine(book.ID + " " + book.BookName + " " + book.Price);

        }
    }
}

最终结果:

2 第二本书 13
2 第二本书 11.1
1 Book A 10

转载于:https://www.cnblogs.com/jeriffe/articles/1806889.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435471.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用ArcGIS将经纬度数据转化成平面坐标数据

经度是指某点与两极的连线与0度经线所在平面的夹角,国际上规定以通过英国伦敦近郊的格林尼治天文台旧址的经线作为计算经度的起点,即经度零度零分零秒,也称“本初子午线”。它东面的为东经,记为E,共180度,西…

电脑连接电视方法详解_笔记本连接电视方法有哪些?分享两种笔记本连接电视方法...

在如今这个快节奏的时代中,大多数年轻人的手中都会有个笔记本电脑,并且将笔记本电脑作为休闲娱乐或办公的一种设备。相比于电视屏幕尺寸,笔记本电脑的屏幕还真是小了很多。为了提高视觉上的体验,很多小伙伴会选择笔记本连接电视的方式,将笔记本中的内容转换到电视屏幕上。下面我…

完整的连接器设计手册_减速齿轮箱的设计 用一整套完整流程来说明(附PDF手册)...

减速箱减速齿轮箱设计手册获取见文章末尾图片在通用的产品设计中,齿轮减速箱的设计是最简单成熟的一种设计,因为设计流程十分清晰,这已经是一种很成熟的产品了,下面我就来说一说如何做减速齿轮箱的设计,以及设计的一般…

在 WinCe 平台读写 ini 文件

在上篇文章开发 windows mobile 上的今日插件时,我发现 wince 平台上不支持例如 GetPrivateProfileString 等相关 API 函数。在网络上我并没有找到令我满意的相应代码,因此我手工自己写了相应的方法。命名规则是,在 PC API 函数的名称前面加上…

SQL Server 兼容模式

近期一个老系统改用SQL Server 2005数据库, 从原来的2000改为2005, 默认情况下启动出错: Incorrect syntax near Index. If this is intended as a part of a table hint, A WITH keyword and parenthesis are now required. SQL 语句中的table hint 中缺少with 关键…

通过VisualSVN的POST-COMMIT钩子自动部署代码

这段时间我们一直规划LSGO Group的学习网络平台,需求部分已经规划完毕,说做就做,开始搭建环境,由于利用PHPMYSQL技术,在服务器端首先安装了WAMPServer,以便提供Apache服务与MYSQL服务! 在代码的…

电脑安装系统多少钱_电脑系统安装教学

双十一刚过,双十一购买硬件的朋友等快递到了,马上就要进入装机环节了,最近会出一系列装机之后的文章,比如今天的装系统教学,之后还会出CPU、内存超频教学。至于装机教学,文章很难解释清楚,如果怕…

数据结构与算法(C#版)第二章 C#语言与面向对象技术(上)V1.0

由于本学期我给本科生上《数据结构与算法》这门课程,边上边把自己的教案进行总结,发到CSDN上面,希望大家多多指正。 第二章 C#语言与面向对象技术(上) 一、C#语言 1.数据类型 2.常量与变量 3.运算符与表达式 4.基本语句…

ie浏览器网页版进入_IE浏览器打开网页速度很慢的解决办法

IE浏览器网页打开速度很慢怎么办?最近有用户反映,使用IE浏览器上网时,打开网页非常慢,如何解决这个问题?请看下文。解决办法:1.登录到系统桌面,使用组合快捷键win键r键打开运行窗口,…

数据结构与算法(C#版)第二章 C#语言与面向对象技术(中)V1.0

由于本学期我给本科生上《数据结构与算法》这门课程,边上边把自己的教案进行总结,发到CSDN上面,希望大家多多指正。 第二章 C#语言与面向对象技术(中) 二、面向对象技术 1.类与对象 2.封装 3.继承 4.多态

判断深度学习模型的稳定性_问题引领构建数学模型,讲练结合促进深度学习

为了立足校本教研、提升教师专业素养、构建高效课堂、提升数学教学质量,我校数学组于11月12日开展了"问题引领构建数学模型,讲练结合促进深度学习"主题教研活动,区教研员钟文丽老师莅临指导。 教研活动第一环节为王…

数据结构与算法(C#版)第二章 C#语言与面向对象技术(下)V1.0

由于本学期我给本科生上《数据结构与算法》这门课程,边上边把自己的教案进行总结,发到CSDN上面,希望大家多多指正。 第二章 C#语言与面向对象技术(下) 二、面向对象技术 5.属性 6.索引器 7.接口 8.泛型 9.类与类之间的…

win10命令提示符怎么打开_Win10系统防火墙怎么打开?ARP防火墙启用步骤

ARP防火墙怎么打开?ARP防火墙能够提供多种系统防护功能,那么Win10系统该如何开启ARP防火墙呢?本文就给大家介绍Win10系统电脑ARP防火墙的启用方法。操作步骤:1、右键点击Win10 开始菜单,然后选择“运行”;或者使用快捷…

LSGO软件技术团队2015~2016学年第二周(0907~0912)总结

由于团队的技术博客正在构建当中,所以先借CSDN对团队本周的情况做一个总结。 1.团队成员签到统计 2、团队发表技术博客统计 从第三周开始,要求每组根据自身的情况,至少发表一篇技术类博客。 3、团队技术小组统计 到目前为止,Mat…

电脑上怎么做pdf文件_图片怎么输出为PDF文件?两种办法教你,手机电脑都能转...

我们经常遇到要将图片转换成pdf文件输出的情况,那么我们有什么办法能更快更好进行转换呢?小编今天给大家带来两个办法,一个是手机上操作的,另一个是电脑上的方法,实测好用!手机端转换手机上小编一般会使用图…

LSGO软件技术团队2015~2016学年第三周(0914~0920)总结

很抱歉,由于我的原因,本学期对团队的数据没有及时统计和整理,在团队的管理中有些放松,近期我会补上,让大家在一个充满正能量的氛围中学习成长。简简单单做人,快快乐乐做事! 本周签到情况统计&am…

利用div的定位制作复杂的页面布局

既然是复杂的布局自然用到较多的div以及并列与嵌套。这就要我们在为它们命名的时候遵从一定的规定,以便于可读性。下面先来看一张布局图:这是三九健康网一个频道的页面,原本是很长的页面,但为了说明问题,取了个完整布局…

LSGO软件技术团队2015~2016学年第四周(0921~0927)总结

我们是一个充满正能量的学习型团队! 简简单单做人,快快乐乐做事! 本周签到情况统计(第四周0921至0927): 团队技术博客账号统计: 进入团队需要遵守的规则: 1.进入团队的同学需遵守“…

正则匹配括号里面的内容不包括括号_python正则表达式

是一个计算机科学概念用于使用单个字符串来描述,匹配某个规则的字符串常常用来检索,替换某些模式的文本正则的写法.(点号):表示任意一个字符,除了[](中括号),匹配括号中列举的范围,如[0-9]代表任意单个字数…

专业程序员必知必会的技巧:驯服复杂代码

你从入职第一天起就要应对复杂代码。 若是还未遇到过无法理解的程序,那说明你编程的年头还不够长。在行业里,要不了多久你就会碰到让人发懵的混乱代码:巨兽、面条工厂、来自地狱的遗留系统。我曾接手过一个程序,它的前任在听说要…