C# Winform编程 连接sqlite3 进行批量更新 想把方法抽出进行解耦
public void update(string DBsource, List<string>sqls){ string source = "Data Source= " + DBsource; using SqliteConnection sqliteConn = new(source); try { sqliteConn.Open(); progressBar1.Value = 0; progressBar1.Maximum = sqls.Count; progressBar1.Visible = true; foreach (var item in sqls) { SqliteCommand cmd = new(item, sqliteConn); cmd.Prepare(); cmd.ExecuteNonQuery(); progressBar1.Value++; } } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { sqliteConn.Close(); }}
但有对进度条的控制内容
如何让进度中每一个更新,能够转递给外部的控件 progressBar1
在C# WinForms中,为了实现SQLite3数据库的批量更新并与进度条联动,你需要将进度更新的逻辑抽取到一个单独的方法中,并通过事件或委托来通知外部控件更新进度条的值。这样,你就可以在调用更新方法时,同时更新UI控件。
下面是一个示例,展示了如何实现这一点:
首先,定义一个委托,用于通知更新进度条的值:
public delegate void ProgressUpdateDelegate(int value);
然后,在更新方法中添加一个事件,当每次执行SQL语句后触发这个事件:
public class DatabaseUpdater{ public event ProgressUpdateDelegate ProgressUpdated; public void Update(string DBsource, List<string> sqls) { string source = "Data Source=" + DBsource; using SqliteConnection sqliteConn = new(source); try { sqliteConn.Open(); int totalCount = sqls.Count; ProgressBarUpdateHelper.Maximum = totalCount; ProgressBarUpdateHelper.Value = 0; ProgressBarUpdateHelper.Visible = true; foreach (var item in sqls) { SqliteCommand cmd = new(item, sqliteConn); cmd.Prepare(); cmd.ExecuteNonQuery(); // 触发事件更新进度条 OnProgressUpdated(1); // 假设每次增加1 } } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { sqliteConn.Close(); } } protected virtual void OnProgressUpdated(int value) { ProgressUpdated?.Invoke(value); }}
在WinForms应用程序中,你需要一个方法来接收这个事件并更新进度条。这通常在你的主窗体类中完成:
public partial class MainForm : Form{ private DatabaseUpdater databaseUpdater; public MainForm() { InitializeComponent(); databaseUpdater = new DatabaseUpdater(); databaseUpdater.ProgressUpdated += DatabaseUpdater_ProgressUpdated; } private void DatabaseUpdater_ProgressUpdated(int value) { // 更新UI,因此需要在控件线程中执行 if (progressBar1.InvokeRequired) { progressBar1.Invoke(new ProgressUpdateDelegate(progressBar1.Value = value)); } else { progressBar1.Value = value; } } private void StartUpdatesButton_Click(object sender, EventArgs e) { // 假设你有一个列表sqls包含所有的SQL语句 List<string> sqls = ...; databaseUpdater.Update("path_to_your_db", sqls); }}
在上面的代码中,MainForm
类订阅了 DatabaseUpdater
类的 ProgressUpdated
事件,并在事件处理器 DatabaseUpdater_ProgressUpdated
中更新了进度条的值。使用 InvokeRequired
和 Invoke
方法确保了UI更新在正确的线程上执行。
当你调用 StartUpdatesButton_Click
方法(可能是一个按钮的点击事件)时,它会启动批量更新过程,并且每次更新都会触发 ProgressUpdated
事件,从而更新UI中的进度条。
本文向大家介绍C# Oracle批量插入数据进度条的实现代码,包括了C# Oracle批量插入数据进度条的实现代码的使用技巧和注意事项,需要的朋友参考一下 前言 由于项目需求,需要将Excel中的数据进过一定转换导入仅Oracle数据库中。考虑到当Excel数据量较大时,循环Insert语句效率太低,故采用批量插入的方法。在插入操作运行时,会造成系统短暂的“卡死”现象。为了让用户知道插入的状态,需
本文向大家介绍c# Winform 程序自动更新实现方法,包括了c# Winform 程序自动更新实现方法的使用技巧和注意事项,需要的朋友参考一下 Winform程序自动更新我也是第一次做,网上找了自动更新的源码,后来又根据在网上看到的一些方法,自己试了很久,最终还是有写错误,所以花了钱让别人帮忙调试成功的,下面是我自己捣腾出来的,方便大家借鉴,如果有什么错误的地方欢迎指正. 1、由于我是通过服务
本文向大家介绍C#批量更新sql实例,包括了C#批量更新sql实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#批量更新sql的方法,分享给大家供大家参考。具体方法如下: 要实现批量更新Card数据,主要有以下步骤: 1、首先建立数据库连接 2、把部分数据填充到Dataset中 3、修改Dataset中数据的值 4、更新Dataset 5、循环操作,具体操作过程见下面代码: 希望本文
本文向大家介绍php批量添加数据与批量更新数据的实现方法,包括了php批量添加数据与批量更新数据的实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php批量添加数据与批量更新数据的实现方法。分享给大家供大家参考。具体分析如下: php如果要批量保存数据我们只要使用sql的insert into语句就可能实现数据批量保存了,如果是更新数据使用update set就可以完成更新了,操作
问题内容: 我有一个具有主键和称为的列的270k行数据库,并且我有一个带有Mid和值的文本文件。现在,我想更新表,以便将每个值分配给正确的中间值。 我当前的方法是从C#中读取文本文件,并为读取的每一行更新表中的一行。必须有一种更快的方式来做我感觉到的事情..有什么想法吗? 编辑:表中还有其他列,所以我真的需要根据中点 更新 的方法。 问题答案: 您可以使用SQL Server导入和导出向导: ht
本文向大家介绍C# Winform下载文件并显示进度条的实现代码,包括了C# Winform下载文件并显示进度条的实现代码的使用技巧和注意事项,需要的朋友参考一下 方法一: 效果如下图所示: 代码如下: 实现方法二: WinForm下载文件并显示下载进度示例