`
kingsz1
  • 浏览: 157503 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

用 C# 访问 SQLite 入门(1)

阅读更多

用 C# 访问 SQLite 入门 (1)

 

SQLite 在 VS C# 环境下的开发,网上已经有很多教程。我也是从这些教程开始学习的。而要专门写下这一篇,是因为按照网上教程的例子,会遇到一些问题,特别是一些细节的设置,没有具体涉及,往往就让我这样的初学者碰壁,明明是全部照搬的却不断出错而不知解决方法。这里就特别记录和注明我遇到的问题和解决方法,让其他的初学者可以仿照处理。

 

这里用到的例子和C#语句,都是从网上来的。

 

1. 下载安装 Sqlite ADO.NET

 

可以从 sourceforge 下载: http://sourceforge.net/projects/sqlite-dotnet2/

安装则是按提示进行即可

 

2. 建立Sqlite 数据库文件

 

我是在 Firefox 下,安装 SQLite Manager 来建立的。例如,建立一个 Books.sqlite 数据库文件:

 

从 Firefox 菜单 启动 SQLite Manager, 点 Database -> New Database, 输入数据库文件名

 


 

然后选择保存路径,例如 把文件保存到 桌面。

 

点 Execute SQL , 在 Enter SQL 区域 输入建库语句,如下:

 

CREATE TABLE Book
(
    ID INTEGER,
    BookName VARCHAR(50),
    Price DOUBLE,
    Rowguid VARCHAR(70),
    PRIMARY KEY(ID)
)
 


 

然后点 Run SQL 即可完成建库工作。

 

在 SQLite Manager 点 Database -> Close Database, 关闭数据库并退出 SQLite Manager.

 

 

3. 新建 C# Project, 引用 sqlite

 

新建一个 VC# 的 Windows Form Application, 命名为 dg2 (或其他名)。

 

在 VS 菜单, 点 Project -> Add Reference

 


 

 

在 .NET 下找到 System.Data.SQLite, 点 OK.

 

 

注意了,重点步骤:

 

在 VS 的右边,Soultion Explor , References, 点 System.Data.SQLite

 


 

然后, 在下面的 Properties 的 Copy Local, 选 True

 

这一步很重要,如果没有这个设置,以后在Debug 或 Build 后试运行,会提示找不到 System.Data.SQLite

 

4. 加入数据库文件

 

把数据库文件放到一个目录下。先建目录:

 

在右边的 Solution Explorer, 在Project名字上点鼠标右键,

在弹出选项,选 Add -> New Folder


 

然后,给 New Folder 改个名字, 例如 db

 



 把数据库文件加入到这个 db 目录之下。

 

在 db 目录名上 点鼠标右键,在弹出菜单 选 Add -> Existing Item


 

然后,在打开的文件对话框,找到以前建立的数据库文件。如上面所示的例子,新建的 Books.sqlite 数据库文件是放在 桌面,我们就从桌面找到和选中这个文件,点 Add,即可把这个文件加入 db 目录下。

 

点一下 这个数据库文件,在下面的 Properties 选项 Copy to output Directory , 必须选 Copy always

 

注意: 这个设置很重要。否则就找不到数据库文件。

 


 

 

5. 建立相关类文件 Class

 

在 VS 菜单, 点 Project -> Add Class, 给个名字 Book.cs , 点 Add, 然后输入对 Book类 的定义:

 

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

        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; }
        }

        public string Rowguid
        {
            get { return rowguid; }
            set { rowguid = value; }
        }

        public Book()
        { }

        public Book(int _id, string _bookname, decimal _price, string _rowguid)
       {
             id = _id;
             bookName = _bookname;
             price = _price;
             rowguid = _rowguid;
       }
    }

 

 

保存。

 

类似步骤,输入 数据库操作类: BookDAL.cs

 

    public class BookDAL
    {
        public static bool CreateBook(Book book)
        {
            try
            {
                SQLiteConnection conn = new SQLiteConnection("Data Source=db/Books.sqlite;");
                conn.Open();
                SQLiteCommand cmd = conn.CreateCommand();
                cmd.CommandText = "INSERT INTO Book(ID, BookName, Price, Rowguid) VALUES(@ID1, @BookName1, @Price1, @Rowguid1)";
                cmd.Parameters.Add(new SQLiteParameter("ID1", book.ID));
                cmd.Parameters.Add(new SQLiteParameter("BookName1", book.BookName));
                cmd.Parameters.Add(new SQLiteParameter("Price1", book.Price));
                cmd.Parameters.Add(new SQLiteParameter("Rowguid1", book.Rowguid));

                int i = cmd.ExecuteNonQuery();
                return i == 1;
            }
            catch (SQLiteException se)
            {
                MessageBox.Show(se.Message + " \n\n" + se.Source + "\n\n" + se.StackTrace + "\n\n" + se.Data);
                return false;
            }
            catch (ArgumentException ae)
            {
                MessageBox.Show(ae.Message + " \n\n" + ae.Source + "\n\n" + ae.StackTrace + "\n\n" + ae.Data);
                return false;
            }
            catch (Exception ex)
            {
                //Do any logging operation here if necessary
                MessageBox.Show(ex.Message + "\n\n" + ex.Source + "\n\n" + ex.StackTrace + "\n\n" + ex.Data);
                return false;
            }            
        }

        public static bool UpdateBookByID(Book book)
        {
            try
            {
                using (SQLiteConnection conn = new SQLiteConnection("Data Source=db/Books.sqlite;"))
                {
                    conn.Open();
                    SQLiteCommand cmd = conn.CreateCommand();
                    cmd.CommandText = "update Book set BookName=@BookName1,Price=@Price1, Rowguid=@Rowguid1 where ID=@ID1;";
                    cmd.Parameters.Add(new SQLiteParameter("ID1", book.ID));
                    cmd.Parameters.Add(new SQLiteParameter("BookName1", book.BookName));
                    cmd.Parameters.Add(new SQLiteParameter("Price1", book.Price));
                    cmd.Parameters.Add(new SQLiteParameter("Rowguid1", book.Rowguid));
                    int i = cmd.ExecuteNonQuery();
                    return i == 1;
                }
            }
            catch (ArgumentException ae)
            {
                MessageBox.Show(ae.Message + " \n\n" + ae.Source + "\n\n" + ae.StackTrace);
                return false;
            }
            catch (Exception ex)
            {
                //Do any logging operation here if necessary
                MessageBox.Show(ex.Message);
                return false;
            }
        }

        public static bool UpdateBookByGuid(Book book)
        {
            try
            {
                using (SQLiteConnection conn = new SQLiteConnection("Data Source=db/Books.sqlite;"))
                {
                    conn.Open();
                    SQLiteCommand cmd = conn.CreateCommand();
                    cmd.CommandText = "update Book set ID=@ID1,BookName=@BookName1,Price=@Price1 where Rowguid=@Rowguid1;";
                    cmd.Parameters.Add(new SQLiteParameter("ID1", book.ID));
                    cmd.Parameters.Add(new SQLiteParameter("BookName1", book.BookName));
                    cmd.Parameters.Add(new SQLiteParameter("Price1", book.Price));
                    cmd.Parameters.Add(new SQLiteParameter("Rowguid1", book.Rowguid));
                    int i = cmd.ExecuteNonQuery();
                    return i == 1;
                }
            }
            catch (ArgumentException ae)
            {
                MessageBox.Show(ae.Message + " \n\n" + ae.Source + "\n\n" + ae.StackTrace);
                return false;
            }
            catch (Exception ex)
            {
                //Do any logging operation here if necessary
                MessageBox.Show(ex.Message);
                return false;
            }
        }

        public static bool DeleteBook(int ID)
        {
            try
            {
                using (SQLiteConnection conn = new SQLiteConnection("Data Source=db/Books.sqlite;"))
                {
                    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 (ArgumentException ae)
            {
                MessageBox.Show(ae.Message + " \n\n" + ae.Source + "\n\n" + ae.StackTrace);
                return false;
            }
            catch (Exception ex)
            {
                //Do any logging operation here if necessary
                MessageBox.Show(ex.Message);
                return false;
            }
        }

        public static Book GetBookByID(int ID)
        {
            try
            {
                using (SQLiteConnection conn = new SQLiteConnection("Data Source=db/Books.sqlite;"))
                {
                    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 (ArgumentException ae)
            {
                MessageBox.Show(ae.Message + " \n\n" + ae.Source + "\n\n" + ae.StackTrace);
                return null;
            }
            catch (Exception ex)
            {
                //Do any logging operation here if necessary
                throw new Exception(ex.Message);
            }
        }

        public static DataTable GetAllBook()
        {
            DataTable dt = new DataTable();
            try
            {
                SQLiteConnection conn = new SQLiteConnection("Data Source=db/Books.sqlite;");
                conn.Open();
                SQLiteCommand cmd = new SQLiteCommand(conn);
                cmd.CommandText = "SELECT * FROM Book";
                cmd.CommandType = CommandType.Text;
                //Console.WriteLine(cmd.CommandText);
                SQLiteDataReader dr = cmd.ExecuteReader();
                if (dr.HasRows)
                {
                    dt.Load(dr);
                }
                else {
                    //throw new NullReferenceException("No Record Available.");
                }

                dr.Close();
                conn.Close();
                                
            }
            catch (ArgumentException ae)
            {
                MessageBox.Show(ae.Message + " \n\n" + ae.Source + "\n\n" + ae.StackTrace + "\n\n" + ae.Data);
            }
            catch (Exception ex)
            {
                //throw new Exception(ex.Message);
                MessageBox.Show(ex.Message + " \n\n" + ex.Source + "\n\n" + ex.StackTrace + "\n\n" + ex.Data);
            }

            return dt;
        }
    }
	

 

在数据库操作类,因为涉及数据库的操作,要在 using 部分,必须加入 using System.Data. SQLite 的引用等语句。

 

using System.Data;
using System.Data.SQLite;
using System.Windows.Forms;

 

 

注意了:

 

初学者都喜欢用别人的代码来做练习,拷贝过来,粘贴上去,可减少敲键盘的时间。但是,在网页上拷贝代码,然后贴到 VS里,会引起很多问题。例如 html 的控制符,空格等等,导致以后程序运行出错,而且不知道错误在哪里。明明在屏幕上看到人家的代码 与 你的代码是一样的,但就是出错。这个时候,就要仔细看看控制符和代码的问题。

 

要减少这类问题,在网页拷贝的代码, 先粘贴到一个纯文本的编辑器,例如 Notepad++ , 然后从 Notepad++ 选择和复制, 再粘贴到 VS 。

 

对于粘贴过来的代码,要特别注意其空格。例如, 下面这个就是从粘贴后的代码:

 


 

可以看到 第14行,18行 等的 空格特别长,当移动光标的时候,它是一个 空格!但实际上它并不是一个空格。一旦运行程序,就会提示记录记录为空,实际上是找不到 数据库文件,或 SQL语句错误等等。

 

处理的办法很简单, 就是在这些语句,手工逐个把空格删掉,然后按一下空格键加上空格。就可以发现自己加的空格位是比较小的,呵呵。

 


 

这些操作没有任何技术含量,但也值得分享一下,

 

 

:-

 

  • 大小: 20.4 KB
  • 大小: 19.2 KB
  • 大小: 26.8 KB
  • 大小: 27.3 KB
  • 大小: 23.7 KB
  • 大小: 37.5 KB
  • 大小: 28.4 KB
  • 大小: 26.3 KB
  • 大小: 9.6 KB
  • 大小: 22 KB
  • 大小: 22.1 KB
  • 大小: 19.8 KB
  • 大小: 12.1 KB
分享到:
评论
1 楼 小强_Pumpkin 2015-07-15  
写的真好 感谢博主

相关推荐

    Visual C# 2010从入门到精通 源代码、勘误、附录、易读版.1-5章.25-29章

    5. **ADO.NET数据库访问**:在25-29章中,读者将学习如何使用C#连接和操作数据库,包括SQL Server或SQLite等。内容涵盖数据连接、数据适配器、数据集、数据表以及存储过程的使用。 6. **高级主题**:除了基础内容,...

    C#和SQLite实现简易库存管理系统的设计与开发

    内容概要:本文档介绍了管理系统的基本概念以及开发过程,着重于如何用C#语言配合SQLite数据库从零开始创建一个简化的库存管理系统,涉及数据模型定义、数据访问层建立和控制器设计等多个方面。此外,还提及了实际...

    C#版QQ 入门项目

    【C#版QQ入门项目详解】 C#版QQ是一个基于C#编程语言开发的即时通讯软件,它允许用户通过输入IP地址与其他用户进行聊天并实现添加好友等功能。这个项目不仅涵盖了C#的基础语法和面向对象编程思想,还涉及到网络通信...

    C# WinForm数据库入门

    在C# WinForm中,我们通常使用ADO.NET(.NET Framework的数据访问组件)来与数据库进行交互。ADO.NET提供了DataSet、DataTable、DataRow等类,它们可以在内存中存储和操作数据,同时DataAdapter用于在数据库和内存中...

    SQLite权威指南(第2版)

    创建和管理数据库文件,定义表结构,以及操作数据的基本SQL语句(如CREATE、INSERT、SELECT、UPDATE、DELETE)是SQLite入门的基础。 2. **事务处理**:SQLite支持ACID(原子性、一致性、隔离性和持久性)事务,确保...

    Visual C# 轻松入门

    1. **变量、表达式和基本结构**:这部分讲解了C#的基础语法,如数据类型(包括整型、浮点型、字符串等)和变量的声明与使用。学习者会了解到如何定义常量,以及如何使用各种运算符,如算术运算符、比较运算符和逻辑...

    宾馆网站模板.NET2.0+SQLite(带源码)

    总的来说,"宾馆网站模板.NET2.0+SQLite(带源码)"是一个集成了前后端和数据库的完整示例,可以帮助初学者快速入门ASP.NET Web Forms开发,并了解如何与SQLite数据库进行集成。对于有一定基础的开发者,这个模板也是...

    C#数据库入门经典(精)

    《C#数据库入门经典》是一本专为初学者设计的指南,旨在帮助读者掌握使用C#语言进行数据库操作的基础知识。这本书涵盖了多个重要的知识点,包括C#与SQL的交互、OLEDB和ADO.NET数据访问技术。以下是这些核心概念的...

    C# .NET工控上位机开发

    C# .NET允许开发者使用多线程和异步编程模型来处理实时数据,确保程序在处理大量数据时仍能保持响应。Task类和async/await关键字是实现异步操作的强大工具。 六、可视化和图表展示 工控上位机往往需要实时显示设备...

    C#开发Android应用实战 使用Mono for Android和.NET C#(美)麦克卢尔

    7. **多媒体与硬件访问**:讲解如何利用C#访问Android的摄像头、GPS、传感器等硬件设备,以及处理音频、视频等多媒体内容的方法。 8. **调试与性能优化**:书中会介绍使用Visual Studio或Monodevelop进行Android...

    C#数据库入门经典(第2版)

    《C#数据库入门经典(第2版)》是一本针对初学者深入浅出介绍如何使用C#语言进行数据库操作的权威教程。这本书以其丰富的实例和详细的源代码,为读者提供了全面的学习路径,帮助他们掌握数据库编程的核心技能。 C#...

    经典C#入门案例.rar

    《C# Windows应用程序开发入门详解》 C#作为.NET框架的核心编程语言,因其简洁、高效、类型安全等特性,被广泛应用于Windows桌面应用程序的开发。本资源“经典C#入门案例.rar”提供了一系列完整的开源代码,旨在...

    C#入门级程序的源代码

    【C#入门级程序的源代码】是一个针对初学者的编程资源,主要涵盖了使用C#语言和ASP.NET框架开发窗体应用的基础知识。这个程序是一个简单的图片管理程序,旨在帮助学习者理解如何在C#环境下处理图形用户界面(GUI)...

    基于windows桌面的c#基础知识,

    2. 数据库访问:ADO.NET是.NET框架的一部分,用于连接和操作数据库,如SQL Server、SQLite等。 七、多线程与并发 C#支持多线程编程,通过Thread类或Task类实现并发执行,提高程序性能。 八、单元测试与调试 Visual...

    visual c# 入门

    在本教程中,你将学习如何在C#中管理用户账户,创建安全的登录系统,使用加密技术保护敏感信息,以及实现基于角色的访问控制。这些知识对于构建安全的Web应用至关重要。 数据库操作是大多数应用程序的基础。教程会...

    C# 入门经典 (第五版) 源码.7z

    1. **C#语言基础**:包括变量、数据类型、常量、运算符、控制结构(如if语句、switch语句、for循环、while循环和do-while循环)、数组、字符串以及方法的使用。 2. **面向对象编程**:C#是一种面向对象的语言,书中...

    c#源码-图书馆管理系统.rar

    1. **书籍信息管理**:在C#源码中,可以创建一个名为`Book`的类,包含书籍的ID、书名、作者、出版社、出版日期等属性,并提供添加、删除、修改和查找书籍的方法。这些方法可能涉及数据库操作,使用ADO.NET或Entity ...

    学生管理系统源代码(c#)

    C#语法清晰,功能强大,适合初学者入门,也满足高级开发者的复杂需求。 在这个学生管理系统中,开发者可能使用了C#的类、对象、接口等核心概念来构建系统架构。例如,可能会有一个`Student`类,用于表示学生信息,...

    EF6-SQLite-CodeFirst P1.rar

    1. 文档:可能是Markdown或PDF格式的教程,详细说明了如何开始设置和使用EF6与SQLite的CodeFirst开发。 2. 示例项目:一个简单的.NET项目,展示了如何配置和使用EF6与SQLite的代码示例。 3. 图像或图表:可能用于...

    C#学生管理系统(适合刚入门的朋友)

    为了更好地组织代码,通常会将数据库表映射为C#类(实体类),并在数据访问层(DAL)实现与数据库的交互。实体类代表了数据库中的记录,而DAL则封装了对数据库的所有操作,这样可以提高代码的可读性和可维护性。 五...

Global site tag (gtag.js) - Google Analytics