ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

C# 中使用 SQLite 实现数据查询、删除与 DataGridView 分页显示

C# 中使用 SQLite 实现数据查询、删除与 DataGridView 分页显示 1. 引言在桌面应用开发中SQLite 凭借轻量、零配置、单文件存储等优势成为 C# WinForms 项目中非常流行的嵌入式数据库。而 DataGridView 则是展示表格数据最常用的控件。本文将手把手带你实现一个完整的示例使用 SQLite 存储数据在 C# 中实现查询、删除操作并将查询结果分页显示在 DataGridView 控件中。2. 准备工作与环境搭建2.1 安装 NuGet 包在 Visual Studio 中创建 WinForms 项目后通过 NuGet 包管理器安装 SQLite 驱动Install-Package System.Data.SQLite.Core也可以使用微软官方的 Microsoft.Data.SqliteInstall-Package Microsoft.Data.Sqlite本文以System.Data.SQLite为例进行讲解。2.2 引入命名空间在代码文件顶部引入以下命名空间usingSystem;usingSystem.Data;usingSystem.Data.SQLite;usingSystem.Windows.Forms;3. 创建数据库与数据表3.1 初始化数据库我们创建一个用户信息表包含 Id、Name、Age、Email 四个字段publicclassDatabaseHelper{privatestaticstringconnectionStringData Sourcetest.db;Version3;;publicstaticvoidInitializeDatabase(){using(varconnnewSQLiteConnection(connectionString)){conn.Open();stringsql CREATE TABLE IF NOT EXISTS Users ( Id INTEGER PRIMARY KEY AUTOINCREMENT, Name TEXT NOT NULL, Age INTEGER NOT NULL, Email TEXT );;using(varcmdnewSQLiteCommand(sql,conn)){cmd.ExecuteNonQuery();}}}}3.2 插入测试数据为了方便演示分页效果我们插入一些测试数据publicstaticvoidInsertTestData(){using(varconnnewSQLiteConnection(connectionString)){conn.Open();for(inti1;i50;i){stringsqlINSERT INTO Users (Name, Age, Email) VALUES (name, age, email);using(varcmdnewSQLiteCommand(sql,conn)){cmd.Parameters.AddWithValue(name,用户i);cmd.Parameters.AddWithValue(age,20i%30);cmd.Parameters.AddWithValue(email,useriexample.com);cmd.ExecuteNonQuery();}}}}4. 分页查询实现4.1 分页查询的核心 SQLSQLite 使用LIMIT和OFFSET关键字实现分页SELECT*FROMUsersORDERBYIdLIMITpageSizeOFFSEToffset;其中offset (当前页码 - 1) * 每页条数。4.2 查询总记录数分页显示需要知道总共有多少条数据以便计算总页数publicstaticintGetTotalCount(){using(varconnnewSQLiteConnection(connectionString)){conn.Open();stringsqlSELECT COUNT(*) FROM Users;using(varcmdnewSQLiteCommand(sql,conn)){returnConvert.ToInt32(cmd.ExecuteScalar());}}}4.3 分页查询方法publicstaticDataTableGetUsersByPage(intpageNumber,intpageSize){DataTabledtnewDataTable();using(varconnnewSQLiteConnection(connectionString)){conn.Open();stringsqlSELECT * FROM Users ORDER BY Id LIMIT pageSize OFFSET offset;;using(varcmdnewSQLiteCommand(sql,conn)){cmd.Parameters.AddWithValue(pageSize,pageSize);cmd.Parameters.AddWithValue(offset,(pageNumber-1)*pageSize);using(varadapternewSQLiteDataAdapter(cmd)){adapter.Fill(dt);}}}returndt;}5. 删除操作实现5.1 按 Id 删除单条记录publicstaticboolDeleteUser(intid){using(varconnnewSQLiteConnection(connectionString)){conn.Open();stringsqlDELETE FROM Users WHERE Id id;;using(varcmdnewSQLiteCommand(sql,conn)){cmd.Parameters.AddWithValue(id,id);returncmd.ExecuteNonQuery()0;}}}5.2 批量删除publicstaticboolDeleteUsers(int[]ids){using(varconnnewSQLiteConnection(connectionString)){conn.Open();using(vartxconn.BeginTransaction()){try{foreach(intidinids){stringsqlDELETE FROM Users WHERE Id id;;using(varcmdnewSQLiteCommand(sql,conn,tx)){cmd.Parameters.AddWithValue(id,id);cmd.ExecuteNonQuery();}}tx.Commit();returntrue;}catch{tx.Rollback();returnfalse;}}}}6. DataGridView 分页显示6.1 窗体界面设计在窗体上放置以下控件一个DataGridView控件用于显示数据两个Button控件上一页、下一页一个Label控件用于显示当前页码信息一个TextBox控件用于输入每页显示条数。6.2 分页逻辑实现publicpartialclassMainForm:Form{privateintcurrentPage1;privateintpageSize10;privateinttotalPages1;publicMainForm(){InitializeComponent();DatabaseHelper.InitializeDatabase();DatabaseHelper.InsertTestData();LoadPage();}privatevoidLoadPage(){inttotalCountDatabaseHelper.GetTotalCount();totalPages(int)Math.Ceiling((double)totalCount/pageSize);if(currentPage1)currentPage1;if(currentPagetotalPages)currentPagetotalPages;DataTabledtDatabaseHelper.GetUsersByPage(currentPage,pageSize);dataGridView1.DataSourcedt;lblPageInfo.Text$第{currentPage}/{totalPages}页共{totalCount}条;btnPrev.EnabledcurrentPage1;btnNext.EnabledcurrentPagetotalPages;}privatevoidbtnPrev_Click(objectsender,EventArgse){currentPage--;LoadPage();}privatevoidbtnNext_Click(objectsender,EventArgse){currentPage;LoadPage();}}6.3 删除选中行在 DataGridView 中添加删除按钮列或在选中行后点击删除按钮privatevoidbtnDelete_Click(objectsender,EventArgse){if(dataGridView1.SelectedRows.Count0){MessageBox.Show(请先选择要删除的行);return;}intidConvert.ToInt32(dataGridView1.SelectedRows[0].Cells[Id].Value);if(DatabaseHelper.DeleteUser(id)){MessageBox.Show(删除成功);LoadPage();// 刷新当前页}else{MessageBox.Show(删除失败);}}7. 完整运行效果运行程序后DataGridView 会显示第一页的 10 条数据。点击「下一页」按钮可以查看后续数据点击「删除」按钮可以删除选中的记录删除后当前页自动刷新。下面是整体流程的示意图点击下一页点击删除程序启动初始化数据库插入测试数据加载第一页数据DataGridView 显示用户操作currentPage执行 DELETE 语句刷新当前页8. 常见问题与注意事项8.1 分页后删除导致页码越界当删除当前页最后一条数据后当前页可能已经没有数据了。此时需要判断并回退页码if(dataGridView1.Rows.Count0currentPage1){currentPage--;}8.2 大数据量下的性能优化当数据量很大时建议在Id字段上建立索引并避免使用SELECT *只查询需要的字段CREATEINDEXidx_users_idONUsers(Id);8.3 参数化查询防注入始终使用参数化查询参数名而不是拼接 SQL 字符串这是防止 SQL 注入的最佳实践。9. 总结本文通过一个完整的 C# WinForms 示例演示了如何使用 SQLite 实现数据的查询、删除操作并通过LIMIT和OFFSET实现 DataGridView 的分页显示。核心要点包括使用System.Data.SQLite连接 SQLite 数据库通过LIMIT和OFFSET实现高效分页使用参数化查询保证安全性通过页码状态管理实现 DataGridView 的翻页交互。你可以在此基础上扩展搜索、排序、编辑等功能打造一个功能完善的桌面数据管理工具。
返回列表