C#操作SQLite方法实例详解_C# 读sqlite_gridview

坑爹的Microsoft.Data.Sqlite没有SQLiteDataAdapter,如何实现读取datatatable和dataset,C#,VBnet 坑爹的Microsoft.Data.Sqlite没有SQLiteDataAdapter,如何实现读取datatatable和dataset。VB源码,自行理解转换C# 阅读详情

首先下载DLL文件

 

using System.Data.SQLite;

Connection和Command:

private SQLiteConnection conn; 
private SQLiteCommand cmd; 

连接db:

conn = new SQLiteConnection("Data Source=c:\\test.db"); 
 conn.Open(); 

INSERT/UPDATE:

cmd = conn.CreateCommand(); 
cmd.CommandText = "INSERT INTO user(email,name) VALUES ('email','name')"; 
cmd.ExecuteNonQuery(); 
  
cmd.CommandText = "UPDATE userSET name = 'Codelicious' WHERE ID = 1"; 
cmd.ExecuteNonQuery();

SELECT:

cmd.CommandText = "SELECT ID, name FROM user"; 
SQLiteDataReader reader = cmd.ExecuteReader(); 
if (reader.HasRows) 
{ 
  while (reader.Read()) 
  { 
   Console.WriteLine("ID: " + reader.GetInt16(0)); 
   Console.WriteLine("name: " + reader.GetString(1)); 
  } 
}

模板程序:

using System; 
using System.Data; 
using System.Data.Common; 
using System.Data.SQLite; 
namespace SQLiteQueryBrowser 
{ 
   /// <summary> 
   /// 说明:这是一个针对System.Data.SQLite的数据库常规操作封装的通用类。 
   /// </summary> 
   public class SQLiteDBHelper 
   { 
     private string connectionString = string.Empty; 
     /// <summary> 
     /// 构造函数 
     /// </summary> 
     /// <param name="dbPath">SQLite数据库文件路径</param> 
     public SQLiteDBHelper(string dbPath) 
     { 
       this.connectionString = "Data Source=" + dbPath; 
     } 
     /// <summary> 
     /// 创建SQLite数据库文件 
     /// </summary> 
     /// <param name="dbPath">要创建的SQLite数据库文件路径</param> 
     public static void CreateDB(string dbPath) 
     { 
       using (SQLiteConnection connection = new SQLiteConnection("Data Source=" + dbPath)) 
       { 
         connection.Open(); 
         using (SQLiteCommand command = new SQLiteCommand(connection)) 
         { 
           command.CommandText = "CREATE TABLE Demo(id integer NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE)"; 
           command.ExecuteNonQuery(); 
           command.CommandText = "DROP TABLE Demo"; 
           command.ExecuteNonQuery(); 
         } 
       } 
     } 
     /// <summary> 
     /// 对SQLite数据库执行增删改操作,返回受影响的行数。 
     /// </summary> 
     /// <param name="sql">要执行的增删改的SQL语句</param> 
     /// <param name="parameters">执行增删改语句所需要的参数,参数必须以它们在SQL语句中的顺序为准</param> 
     /// <returns></returns> 
     public int ExecuteNonQuery(string sql, SQLiteParameter[] parameters) 
     { 
       int affectedRows = 0; 
       using (SQLiteConnection connection = new SQLiteConnection(connectionString)) 
       { 
         connection.Open(); 
         using (DbTransaction transaction = connection.BeginTransaction()) 
         { 
           using (SQLiteCommand command = new SQLiteCommand(connection)) 
           { 
             command.CommandText = sql; 
             if (parameters != null) 
             { 
               command.Parameters.AddRange(parameters); 
             } 
             affectedRows = command.ExecuteNonQuery(); 
           } 
           transaction.Commit(); 
         } 
       } 
       return affectedRows; 
     } 
     /// <summary> 
     /// 执行一个查询语句,返回一个关联的SQLiteDataReader实例 
     /// </summary> 
     /// <param name="sql">要执行的查询语句</param> 
     /// <param name="parameters">执行SQL查询语句所需要的参数,参数必须以它们在SQL语句中的顺序为准</param> 
     /// <returns></returns> 
     public SQLiteDataReader ExecuteReader(string sql, SQLiteParameter[] parameters) 
     { 
       SQLiteConnection connection = new SQLiteConnection(connectionString); 
       SQLiteCommand command = new SQLiteCommand(sql, connection); 
       if (parameters != null) 
       { 
         command.Parameters.AddRange(parameters); 
       } 
       connection.Open(); 
       return command.ExecuteReader(CommandBehavior.CloseConnection); 
     } 
     /// <summary> 
     /// 执行一个查询语句,返回一个包含查询结果的DataTable 
     /// </summary> 
     /// <param name="sql">要执行的查询语句</param> 
     /// <param name="parameters">执行SQL查询语句所需要的参数,参数必须以它们在SQL语句中的顺序为准</param> 
     /// <returns></returns> 
     public DataTable ExecuteDataTable(string sql, SQLiteParameter[] parameters) 
     { 
       using (SQLiteConnection connection = new SQLiteConnection(connectionString)) 
       { 
         using (SQLiteCommand command = new SQLiteCommand(sql, connection)) 
         { 
           if (parameters != null) 
           { 
             command.Parameters.AddRange(parameters); 
           } 
           SQLiteDataAdapter adapter = new SQLiteDataAdapter(command); 
           DataTable data = new DataTable(); 
           adapter.Fill(data); 
           return data; 
         } 
       } 
     } 
     /// <summary> 
     /// 执行一个查询语句,返回查询结果的第一行第一列 
     /// </summary> 
     /// <param name="sql">要执行的查询语句</param> 
     /// <param name="parameters">执行SQL查询语句所需要的参数,参数必须以它们在SQL语句中的顺序为准</param> 
     /// <returns></returns> 
     public Object ExecuteScalar(string sql, SQLiteParameter[] parameters) 
     { 
       using (SQLiteConnection connection = new SQLiteConnection(connectionString)) 
       { 
         using (SQLiteCommand command = new SQLiteCommand(sql, connection)) 
         { 
           if (parameters != null) 
           { 
             command.Parameters.AddRange(parameters); 
           } 
           SQLiteDataAdapter adapter = new SQLiteDataAdapter(command); 
           DataTable data = new DataTable(); 
           adapter.Fill(data); 
           return data; 
         } 
       } 
     } 
     /// <summary> 
     /// 查询数据库中的所有数据类型信息 
     /// </summary> 
     /// <returns></returns> 
     public DataTable GetSchema() 
     { 
       using (SQLiteConnection connection = new SQLiteConnection(connectionString)) 
       { 
         connection.Open(); 
         DataTable data=connection.GetSchema("TABLES"); 
         connection.Close(); 
         //foreach (DataColumn column in data.Columns) 
         //{ 
         //  Console.WriteLine(column.ColumnName); 
         //} 
         return data; 
       } 
     } 
   } 
}

完整的程序例子:

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Data; 
using System.Data.Common; 
using System.Data.SQLite; 
using SQLiteQueryBrowser; 
namespace SQLiteDemo 
{ 
   class Program 
   { 
     static void Main(string[] args) 
     { 
       //CreateTable(); 
       //InsertData(); 
       ShowData(); 
       Console.ReadLine(); 
     } 
     public static void CreateTable() 
     { 
       string dbPath = "D:\\Demo.db3"; 
       //如果不存在改数据库文件,则创建该数据库文件 
       if (!System.IO.File.Exists(dbPath)) 
       { 
         SQLiteDBHelper.CreateDB("D:\\Demo.db3"); 
       } 
       SQLiteDBHelper db = new SQLiteDBHelper("D:\\Demo.db3"); 
       string sql = "CREATE TABLE Test3(id integer NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,Name char(3),TypeName varchar(50),addDate datetime,UpdateTime Date,Time time,Comments blob)"; 
       db.ExecuteNonQuery(sql, null); 
     } 
     public static void InsertData() 
     { 
       string sql = "INSERT INTO Test3(Name,TypeName,addDate,UpdateTime,Time,Comments)values(@Name,@TypeName,@addDate,@UpdateTime,@Time,@Comments)"; 
       SQLiteDBHelper db = new SQLiteDBHelper("D:\\Demo.db3"); 
       for (char c = "A"; c <= "Z"; c++) 
       { 
         for (int i = 0; i < 100; i++) 
         { 
           SQLiteParameter[] parameters = new SQLiteParameter[]{ 
             new SQLiteParameter("@Name",c+i.ToString()), 
           new SQLiteParameter("@TypeName",c.ToString()), 
           new SQLiteParameter("@addDate",DateTime.Now), 
           new SQLiteParameter("@UpdateTime",DateTime.Now.Date), 
           new SQLiteParameter("@Time",DateTime.Now.ToShortTimeString()), 
           new SQLiteParameter("@Comments","Just a Test"+i) 
           }; 
           db.ExecuteNonQuery(sql, parameters); 
         } 
       } 
     } 
     public static void ShowData() 
     { 
       //查询从50条起的20条记录 
       string sql = "select * from test3 order by id desc limit 50 offset 20"; 
       SQLiteDBHelper db = new SQLiteDBHelper("D:\\Demo.db3"); 
       using (SQLiteDataReader reader = db.ExecuteReader(sql, null)) 
       { 
         while (reader.Read()) 
         { 
           Console.WriteLine("ID:{0},TypeName{1}", reader.GetInt64(0), reader.GetString(1)); 
         } 
       } 
     } 
   } 
 }

 

SQLite 数据库 C# Dapper 操作实例 1. 概述 前面写过一篇文章《C# SQLite 数据库使用说明》,介绍的是 C# 语言用最原始的 ADO.net 方式操作 SQLite 数据库。可是这种方式很久没用过了,主要是因为 Dapper 和 PetaPoco 太好了用 本文参照 DarkThread 的文章,整理了一套 C# 使用 Dapper 操作 SQLite 数据库的实例,方便自己日后查询。 2. 前置条件 本程序依赖 ... 阅读详情

相关推荐

C#开发Windows窗体图书管理系统实战指南

Windows窗体应用开发是.NET桌面开发的核心技术之一,采用C#语言结合WinForms框架可以快速构建响应迅速的本地应用程序。其技术原理基于事件驱动模型,通过可视化设计器简化UI开发流程,配合ADO.NET实现高效数据访问。在中小型业务系统开发中,这种技术组合既能保证开发效率,又能提供良好的用户体验。图书管理系统作为经典案例,涵盖了数据库设计(如SQLite集成)、业务逻辑封装、报表生成等企业级应用常见需求。通过分层架构(DAL/BLL/UI)和模块化设计,项目展示了如何使用Visual Studio

weixin_33782386的博客 306

C# SQLiteHelper - 附实战使用Demo源码

C# SQLite使用实战示例Demo 1.轻量级 使用 SQLite 只需要带一个动态库,就可以享受它的全部功能,而且那个动态库的尺寸想当小。 2.独立性 SQLite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的“安装”。 3.隔离性 SQLite 数据库中所有的信息(比如表、视图、触发器等)都包含在一个文件夹内,方便管理和维护。 4.跨平台 SQLite 目前支持大部分操作系...

Aries·Zhao 5440

C#考勤查询系统实战开发页面

C# 是一种现代化、面向对象的编程语言,由微软于2000年推出,广泛应用于Windows应用、游戏开发、企业级Web系统等多个领域。在Web开发中,C# 与 ASP.NET 框架紧密结合,提供了高效、稳定、可扩展的开发体验。其强大的类库支持、良好的类型安全机制以及与Visual Studio等开发工具的无缝集成,使其成为企业级Web项目开发的首选语言之一。本章将介绍C#在Web开发中的核心地位,并探讨其在构建现代Web应用程序中的适用性。

weixin_35019679的博客 382

C# 使用SQLite

C# SQLite 操作。

flysh05的专栏 4645

光模块封装工艺简介

光模块按照部件可以分为芯片、光器件、光模块三个层级;按照应用领域大概可分为电信应用、数通应用两个领域;按照内部器件的封装工艺可分为TO、Box、COB三大类。 但是,无论是哪种类型的光模块,其生产工艺基本上可以分为封装、测试两大块。   那什么叫做器件封装呢?我的理解器件封装就是利用胶水、焊料、机械、热量等手段把器件按照一定的先后次序结合形成一个整体的过程,就好像早上吃的煎饼,把面粉、鸡蛋、脆饼、烤肠、葱花等这些“器件”,按照一定的顺序,通过食用油、甜面酱、加热、卷起来等手段结合到一起,形成了美味的

qq_33253182的博客 2830

Windows本地化部署Dify完整指南

本文详细介绍了在Windows系统上本地化部署Dify的完整步骤,涵盖了Docker Desktop的安装与配置、Dify源代码的获取、环境变量的设置、服务的启动与管理、以及常见问题的解决方案。文章首先指导用户如何下载和安装Docker Desktop,并配置WSL 2功能。接着,详细说明了如何获取Dify源代码,并通过Docker Compose启动服务。文章还提供了高级配置指南,包括如何配置大语言模型和更新Dify版本。最后,针对Docker镜像拉取失败等常见问题,提供了详细的诊断和解决方案。通过本文,

jacky_zhuyuanlu的博客 1万+

C# 操作SQLite3数据库(内附操作源码分享)

C#使用辅助类,操作SQLite3数据库,帮助大家在使用单机库时少走弯路

weixin_39525333的博客 4349

【Anaconda】conda国内镜像源快速配置指南(清华/阿里云)

本文详细介绍了如何为Anaconda配置国内镜像源(清华/阿里云),以显著提升conda包下载速度并减少安装失败率。通过分步指南和实用技巧,帮助开发者快速完成配置,优化Python开发环境。

weixin_33725722的博客 1488

C#操作数据库、打字程序,GridView访问数据库、程序打包本地sqlite数据库文件

这里写自定义目录标题访问数据库的类程序打包本地sqlite数据库文件 访问数据库的类 class MyMeans //访问数据库的类--类包含了程序使用的数据和方法声明。类一般包含多个方法。方法定义了类的行为。 { public static int id = 0; public static string Login_ID = ""; //全局变量 public static string Login_Name = ""; pub

Percy1993的博客 716

Simulink模块库介绍(一)——信号源模块

Simulink模块库介绍(一)——信号源模块库目录Clock模块Digital Clock模块Band-Limited White Noise模块 目录 simulink模块库中提供了丰富的信号源模块组。逐一介绍,算是对之前做个总结吧 Clock模块 通过时钟模块,输出的时间作为判断呢,如下图,前2s之前为高斯白噪声,后2s为正弦曲线,共计10s。 Digital Clock模块 数字时钟模块主要用于离散系统的计时,sample time表示采用时间,如下图:分别是1s和0.5s的采样时间 Band-

5万+

一文带你了解什么是RDMA

RDMA(Remote Direct Memory Access,远程直接内存访问)是一种起源于高性能计算领域的通信技术,如今已广泛应用于数据中心。该技术使得用户程序能够绕过操作系统内核及CPU,直接与网络接口卡(NIC)交互,实现网络通信。这种方式不仅大幅提升了通信带宽,还显著降低了网络延迟,优化了整体性能。

嵌入式技术开发 6016

C#连接Sqlite实现单表操作

今天我们来了解下VS使用的众多数据库中比较轻量的数据库SQLITE,好处当然就在于“轻~”!!!。自己理解

weixin_30726161的博客 241

ICC2: pin shape不在track上引起的drc如何解决?

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 435

【C#】GridControl动态更换DataSource,查询数据异常处理

GridControl动态更换DataSource,数据刷新异常处理。 当我们使用GridControl控件时,如果表格列没有预先添加,而是采用动态形势,更换绑定的DataSource时会发生异常,数据字段列对不上的情况,依然缓存了上一次的结果。 可能有人说,你使用 RefreshDataSource();刷新一下DataSource,也许就行了。我很抱歉的告诉你,不行,而且你重新绑定DataSource也不行。

花北城的博客 1652

Vue+OpenLayers6一本通,OpenLayers6完整教程大全,OpenLayers6全知全解,OpenLayers6入门、实战、扩展进阶三合一专栏目录汇总

Gis开发入门,OpenLayers、Leaflet、Maplibre-gl和Cesiumjs地图引擎介绍以及几种地图服务vms、vmts介绍OpenLayers介绍,相比较其他地图引擎有什么优点OpenLayers7.x版本和6.x版本有什么区别,是否需要升级到OpenLayers7版本?OpenLayers6实战:OpenLayers创建自定义控件,以创建一个地图复位控件为例OpenLayers6实战,OpenLayers创建自定义鹰眼控件,自定义鹰眼控件样式,调整鹰眼控件位置、大小、文字和按钮等样式。

GIS技术方向,GIS地图技术分享(GIS入门、Openlayers教程、Leaflet教程),做最好的GIS地图开发教程。关注博主公众号:eguid 2199

使用plot函数可视化F分布累积分布函数数据(R语言)

在上面的代码中,我们使用了seq()函数来生成从0到5之间,以0.1为步长的一组F值。然后,我们指定了分子自由度为3,分母自由度为8,并使用pf()函数计算了对应的F分布CDF值。在本文中,我们将介绍如何使用R语言的plot函数来可视化F分布的累积分布函数(CDF)数据。通过使用plot函数,我们可以直观地了解F分布的累积分布函数,并对F值和对应的累积概率之间的关系有更深入的认识。运行上述代码后,我们将获得一个由F值和对应的累积概率构成的图形,其中x轴表示F值,y轴表示累积概率。

LogicGuruX的博客 502

c#+mysql锁_C#:SQLite数据库总是被锁定

我写了一个简单的应用程序(称之为app1),它读取SQLite数据库并在gridview中显示内容.我有一个单独的C#控制台应用程序(app2)需要写入同一个数据库.问题是app2因“数据库被锁定”错误而失败.我可以看到,一旦启动app1,就会创建一个userdb-journal文件.我假设问题是app1打开数据库但不释放它?这是我填充表I的代码,我绑定到app1中的网格.public DataT...

weixin_39755890的博客 230

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

SQLite分页读取

转自http://www.android-study.com/jichuzhishi/493.html Android内置了常用于嵌入式系统的SQLite,免去了开发者自己安装的功夫。SQLite 支持多数 SQL92 标准,很多常用的SQL命令都能在SQLite上面使用,除此之外Android还提供了一系列自定义的方法去简化对SQLite数据库的操作。不过有跨平台需求的程序就建议使用标准的

u010436741的专栏 1298

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Enterprise Library 5.0访问SQLite数据库

Enterprise Library 5.0访问SQLite数据库

gdjlc的专栏 2985

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

SQLite分页表格

转自http://www.android-study.com/jichuzhishi/496.html 实现并封装一个SQL分页表格控件,不仅支持分页还是以表格的形式展示数据。先来看看本文程序运行的动画: 这个SQL分页表格控件主要分为“表格区”和“分页栏”这两部分,这两部分都是基于GridView实现的。网上介绍Android上实现表格的DEMO一般都用ListView。ListVi

u010436741的专栏 1264

c#从数据库读取数据到datagridview

/这里写你的查询语句。MessageBox.Show("数据表不存在,无法查询");

sdkdslx的博客 1160

告别增删改查Demo!用WinForm + SQLite做个带UI的本地数据管理器(C#实战)

本文详细介绍了如何使用WinForm和SQLite开发一个功能完整的本地数据管理器(C#实战),告别简单的增删改查Demo。通过DataGridView实现数据可视化展示与编辑,利用BindingSource简化数据绑定逻辑,并应用SQLite的性能优化技巧。项目包含数据浏览、条件筛选、批量操作等实用功能,适合需要快速开发小型数据管理工具的.NET开发者。

weixin_33508411的博客 348

C#Sqlite增删改查

说到使用数据库的话,无非也就是对数据的增加,删除和修改以及查询。前文已经 创建好了程序,现在我们就可以来具体实现Sqlite的数据操作,增删改查。 第一步,创建连接字符串来连接数据库: private void lianjie(){}//重新写个方法,将代码写在里面,然后放到窗体加载事件中, 因为是窗体起始要显示的数据...

weixin_30502965的博客 604

C#进阶核心:委托、反射、泛型与异步编程实战解析

在C#编程中,委托与事件是实现解耦和发布-订阅模式的关键机制,它们通过类型安全的函数指针和封装,为构建松耦合架构提供了基础。反射技术则赋予程序在运行时动态加载和操作类型的能力,是实现插件化架构和动态扩展的核心原理。泛型通过类型参数化,解决了代码复用和类型安全的问题,而协变与逆变进一步提升了API的灵活性。异步编程通过async/await状态机模型,不仅避免了界面卡顿,更优化了I/O密集型操作的资源利用率。这些技术共同构成了C#处理复杂业务逻辑、实现高性能应用和与外部系统(如数据库、串口、OPC服务器)交互

weixin_34301132的博客 531

MonoDroid相关资源

2月版的Visual Studio杂志上MonoDroid文章,写的是让开发人员可以使用C#语言和Mono虚拟机为Android移动操作系统编写应用程序的MonoDroid: Intro to MonoDroid Part 1. Intro to MonoDroid Part 2. Introduction to MonoDroid: Slides, Code and Video ...

weixin_34295316的博客 77

AI工具连接新范式:Model Context Protocol(MCP)详解与实战

在人工智能与外部系统集成领域,标准化接口协议是解决数据孤岛、提升AI代理能力的关键。其核心原理在于定义一套通用的通信规范,使AI模型能够安全、可控地发现、访问和操作外部数据源与工具,从而将AI从封闭的对话系统转变为能主动协调工作流的智能体。这项技术的核心价值在于实现了AI核心模型与外围工具生态的解耦,通过协议标准化降低了开发集成成本,并大幅扩展了AI的应用边界。典型的应用场景包括让AI助手直接分析数据库、操作文件系统、调用搜索API或与第三方协作平台(如Figma、GitHub)交互。本文聚焦的Model

benben 397
上一篇: 针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集。
下一篇: C# DataSet与DataTable的区别和用法
csdner
博客等级 码龄26年 9粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值