在C#中运用 SQLite

在C#中运用 SQLite
 
作者:IcyCoffee  来源:blog.csdn.net/icycoffee  时间:2010-3-8  【 字体:大 中 小 】 〖 双击滚屏 〗
 
 
 

  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. 接下来在新数据库中添加一张表。

  下面开始为此表建立一个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
(id,bookname,price) 

 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

//---------------------------------------------------------------

using System.Data;
using System.Data.Common;
using System.Data.SQLite;

// 创建数据库文件
File.Delete("test1.db3");
SQLiteConnection.CreateFile("test1.db3");

DbProviderFactory factory = SQLiteFactory.Instance;
using (DbConnection conn = factory.CreateConnection())
{
  // 连接数据库
  conn.ConnectionString = "Data Source=test1.db3";
  conn.Open();

  // 创建数据表
  string sql = "create table [test1] ([id] INTEGER PRIMARY KEY, [s] TEXT COLLATE NOCASE)";
  DbCommand cmd = conn.CreateCommand();
  cmd.Connection = conn;
  cmd.CommandText = sql;
  cmd.ExecuteNonQuery();

  // 添加参数
  cmd.Parameters.Add(cmd.CreateParameter());
  
  // 开始计时
  Stopwatch watch = new Stopwatch();
  watch.Start();
  
  // 连续插入1000条记录
  for (int i = 0; i < 1000; i++)
  {
    cmd.CommandText = "insert into [test1] ([s]) values (?)";
    cmd.Parameters[0].Value = i.ToString();

    cmd.ExecuteNonQuery();
  }

  // 停止计时
  watch.Stop();
  Console.WriteLine(watch.Elapsed);
}

哎~~~~ 一个常识性的错误,我加几行代码 (新增代码标记 "// <-------------------")。
using System.Data;
using System.Data.Common;
using System.Data.SQLite;

// 创建数据库文件
File.Delete("test1.db3");
SQLiteConnection.CreateFile("test1.db3");

DbProviderFactory factory = SQLiteFactory.Instance;
using (DbConnection conn = factory.CreateConnection())
{
  // 连接数据库
  conn.ConnectionString = "Data Source=test1.db3";
  conn.Open();

  // 创建数据表
  string sql = "create table [test1] ([id] INTEGER PRIMARY KEY, [s] TEXT COLLATE NOCASE)";
  DbCommand cmd = conn.CreateCommand();
  cmd.Connection = conn;
  cmd.CommandText = sql;
  cmd.ExecuteNonQuery();

  // 添加参数
  cmd.Parameters.Add(cmd.CreateParameter());
  
  // 开始计时
  Stopwatch watch = new Stopwatch();
  watch.Start();
  
  DbTransaction trans = conn.BeginTransaction(); // <-------------------
  try 
  {
    // 连续插入1000条记录
    for (int i = 0; i < 1000; i++)
    {
      cmd.CommandText = "insert into [test1] ([s]) values (?)";
      cmd.Parameters[0].Value = i.ToString();

      cmd.ExecuteNonQuery();
    }

    trans.Commit(); // <-------------------
  }
  catch
  {
    trans.Rollback(); // <-------------------
    throw; // <-------------------
  }

  // 停止计时
  watch.Stop();
  Console.WriteLine(watch.Elapsed);
}

执行一下,耗时 0.2 秒。

转载于:https://www.cnblogs.com/sqlite3/archive/2011/05/20/2566859.html

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

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

相关文章

降维方法 -简直太全- 附Python代码(Random Forest、Factor Analysis、corr、PCA、ICA、IOSMA

为什么要降维&#xff1f; 建模初期&#xff0c;我们往往只有几个指标&#xff0c;这个时候不太涉及到降维&#xff0c;但是一个月后你就发现&#xff0c;模型的指标越来越多&#xff0c;从原有的五六个指标一步一步变成 100 个指标。100 个很多吗&#xff1f;不多&#xff01…

LeetCode 1268. 搜索推荐系统(Trie树/multiset)

1. 题目 给你一个产品数组 products 和一个字符串 searchWord &#xff0c;products 数组中每个产品都是一个字符串。 请你设计一个推荐系统&#xff0c;在依次输入单词 searchWord 的每一个字母后&#xff0c;推荐 products 数组中前缀与 searchWord 相同的最多三个产品。 如…

CYQ.DBImport 数据库反向工程及批量导数据库工具 V2.0 发布[增加批量导出数据库脚本及数据库设计文档]...

上次发布的&#xff1a;CYQ.DBImport V1.0的相关介绍&#xff1a;CYQ.DBImport 数据库反向工程及批量导数据库工具 V1.0 本次发布的V2.0 版本&#xff0c;准备突击海外&#xff0c;下面为相关的介绍。 一&#xff1a;新版本2.0的新增功能介绍 1&#xff1a;修正GUID的脚本错误2…

Power BI 如何获取数据做可视化

获 取 数 据 l 获取数据 Power BI Desktop 可连接到种类广泛的多种数据源&#xff0c;包括本地数据库、Excel 工作表和云服务等。 它可帮助清理数据和设置数据格式&#xff0c;以使数据更为有用&#xff0c;包括拆分和重命名列、更改数据类型和处理日期。还可创建列之间的关…

LeetCode 1234. 替换子串得到平衡字符串(滑动窗口)

1. 题目 有一个只含有 ‘Q’, ‘W’, ‘E’, ‘R’ 四种字符&#xff0c;且长度为 n 的字符串。 假如在该字符串中&#xff0c;这四个字符都恰好出现 n/4 次&#xff0c;那么它就是一个「平衡字符串」。 给你一个这样的字符串 s&#xff0c;请通过「替换一个子串」的方式&am…

asp.net mvc 实现文件管理参考资料

1、http://www.cnblogs.com/chsword/archive/2009/03/17/aspnetmvcfilemanagement.html 2、http://www.0812ok.com/app/blog/info.aspx?bid221转载于:https://www.cnblogs.com/cuiwenke/archive/2011/05/30/2063264.html

Power BI 将商业智能数据转换为数据理解

l 研究数据 在本部分中你要了解各种知识&#xff0c;并且积极的互动和进行 Power BI 共享在这一部分至关重要。 Power BI 服务简介 Power BI 服务是 Power BI Desktop 的自然扩展&#xff0c;其功能包括上传报表、创建仪表板&#xff0c;以及使用自然语言对数据进行提问。该服…

LeetCode 554. 砖墙(map计数)

1. 题目 你的面前有一堵方形的、由多行砖块组成的砖墙。 这些砖块高度相同但是宽度不同。你现在要画一条自顶向下的、穿过最少砖块的垂线。 砖墙由行的列表表示。 每一行都是一个代表从左至右每块砖的宽度的整数列表。 如果你画的线只是从砖块的边缘经过&#xff0c;就不算穿…

Power BI 数据可视化(核心),让报表更生动

可 视 化 l 可视化 Power BI 中的视觉对象简介 实现数据可视化是 Power BI 的核心部分&#xff08;像我们在本课程前面所定义那样&#xff0c;它是基本的构建基块&#xff09;&#xff0c;而创建视觉对象是发现并共享你的见解的最简方法。 Power BI 默认提供众多可视化效果…

LeetCode 978. 最长湍流子数组(DP)

1. 题目 当 A 的子数组 A[i], A[i1], ..., A[j] 满足下列条件时&#xff0c;我们称其为湍流子数组&#xff1a; 若 i < k < j&#xff0c;当 k 为奇数时&#xff0c; A[k] > A[k1]&#xff0c;且当 k 为偶数时&#xff0c;A[k] < A[k1]&#xff1b;或 若 i < …

Power BI数据建模

l 建模 通常情况下&#xff0c;你将会连接到多个数据源以创建报表&#xff0c;且需所有数据协同工作。 建模就是实现这一点的办法。 若要创建不同数据源之间的逻辑连接&#xff0c;需创建一种关系。 数据源之间的关系使 Power BI 能够了解表与表之间的关系&#xff0c;以便能…

Asp.Net文件和文件夹操作大全

/// <summary> /// 创建文件夹 /// </summary> /// <param name"Path"></param> public static void FolderCreate(string Path) { // 判断目标目录是否存在如果不存在则新建之 i…

LeetCode 1283. 使结果不超过阈值的最小除数(二分查找)

1. 题目 给你一个整数数组 nums 和一个正整数 threshold &#xff0c;你需要选择一个正整数作为除数&#xff0c;然后将数组里每个数都除以它&#xff0c;并对除法结果求和。 请你找出能够使上述结果小于等于阈值 threshold 的除数中 最小 的那个。 每个数除以除数后都向上取…

Power BI 数据可视化软件实现共享报表

l 在 Power BI 中与同事共享和协作 在此模块中&#xff0c;涵盖各种用于与同事共享和协作处理仪表板、报表和数据的方法。例如&#xff0c;你可以&#xff1a; 从 Power BI Desktop 向 Power BI 服务发布报表使用 Power BI Mobile 应用查看共享报表和仪表板并与其交互创建打包…

flash和js通讯的伪沙箱安全错误

加载到页面的flash需要和当前页面上的js通讯的时候&#xff0c;如果是js和flash在同一个域那就没有安全错误发生如果不在同一个域就会有安全错误发生。不在同一个域的flash和js跨域访问的时候 ,可以用下列方式解决跨域问题要在页面上添加参数行:<param name"allowScrip…

LeetCode 1144. 递减元素使数组呈锯齿状(奇偶分别遍历)

1. 题目 给你一个整数数组 nums&#xff0c;每次 操作 会从中选择一个元素并 将该元素的值减少 1。 如果符合下列情况之一&#xff0c;则数组 A 就是 锯齿数组&#xff1a; 每个偶数索引对应的元素都大于相邻的元素&#xff0c;即 A[0] > A[1] < A[2] > A[3] < …

有趣的数学 - 6174数学黑洞 - C/C++代码实现

6174数学黑洞 它的算法如下&#xff1a; 6174黑洞对首个设定的数值有所限制&#xff0c;取任意一个4位数&#xff08;4个数字均为同一个数的除外&#xff09;&#xff0c;将该数的4个数字重新组合&#xff0c;形成可能的最大数和可能的最小数&#xff0c;再将两者之间的差求出…

ActionScript 3.0 组件!

ActionScript 3.0 组件&#xff01; 缓动效果http://code.google.com/p/tweener/ 查询出URL后的所有参数的KEY VAULEhttp://evolve.reintroducing.com/2008/07/03/as3/as3-querystring/#more-141 加载管理&#xff0c;加载资源的管理http://code.google.com/p/queueloader-as3…

LeetCode 1470. 重新排列数组

1. 题目 给你一个数组 nums &#xff0c;数组中有 2n 个元素&#xff0c;按 [x1,x2,...,xn,y1,y2,...,yn] 的格式排列。 请你将数组按 [x1,y1,x2,y2,...,xn,yn] 格式重新排列&#xff0c;返回重排后的数组。 示例 1&#xff1a; 输入&#xff1a;nums [2,5,1,3,4,7], n 3 …

非线性规划 - 用非线性规划解决问题 - (Lingo建模)

在经营管理中&#xff0c;为取得更高的利润&#xff0c;不仅需要提高经营收入&#xff0c;也要考虑如何在现有的人力、物力和财力条件下合理安排&#xff0c;在满足要求的前提下&#xff0c;达到最低的成本。对于静态的最优化问题&#xff08;即所有数据不会瞬息万变&#xff0…