C#winform点击按钮下载数据库中表的字段到Excel上

C#winform点击按钮下载数据库中表的字段到Excel上

需求:C#winform点击按钮下载数据库中表的字段到Excel,并计算下载消耗的时间以及文件存放位置。

C#实现

csharp 复制代码
using System;
using System.Data;
using System.Data.OleDb;
using System.Data.SqlClient;
using System.Drawing;
using System.IO;
using System.Net;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;
using OfficeOpenXml;
using System.Threading.Tasks;
using Newtonsoft.Json;
using System.Net.Http;

namespace WindowsFormsApp1
{
    public partial class 下载表字段 : Form
    {
		/ 数据库连接字符串
        private string connectionString = "server=127.0.0.1;uid=sa;pwd=xyz@0123456;database=test";
		
		private async void buttonDownload_Click(object sender, EventArgs e)
        {
            using (SaveFileDialog saveFileDialog = new SaveFileDialog())
            {
                saveFileDialog.Filter = "Excel files (*.xlsx)|*.xlsx";
                saveFileDialog.Title = "Save Excel Template";
                saveFileDialog.FileName = "用户模板";
                if (saveFileDialog.ShowDialog() == DialogResult.OK)
                {
                    string savePath = saveFileDialog.FileName;

                    try
                    {
                        // 连接到 SQL Server 数据库
                        using (SqlConnection sqlConnection = new SqlConnection(connectionString))
                        {
                            await sqlConnection.OpenAsync();

                            // 从数据库中读取字段名
                            using (SqlCommand command = new SqlCommand("SELECT * FROM Employee", sqlConnection))
                            using (SqlDataReader reader = await command.ExecuteReaderAsync())
                            {
                                // 获取字段数量
                                int totalColumns = reader.FieldCount;

                                // 初始化进度条
                                progressBar1.Maximum = totalColumns + 1;
                                progressBar1.Value = 0;

                                // 创建 Excel 文件
                                using (ExcelPackage excelPackage = new ExcelPackage())
                                {
                                    ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets.Add("Template");

                                    // 写入字段名
                                    int columnIndex = 1;
                                    for (int i = 0; i < totalColumns; i++)
                                    {
                                        worksheet.Cells[1, columnIndex].Value = reader.GetName(i);
                                        columnIndex++;

                                        // 更新进度条
                                        progressBar1.Value++;
                                        await Task.Delay(10); // 延时以更新进度条显示
                                    }

                                    excelPackage.SaveAs(new FileInfo(savePath));
                                }
                            }



                            // 计算所导出Excel消耗的时间
                            //TimeSpan elapsedTime = DateTime.Now - startTime;
                            //MessageBox.Show("导出Excel消耗时间: " + elapsedTime.ToString("g"));
                            // 计算所导出 Excel 消耗的时间(秒)
                            TimeSpan elapsedTime = DateTime.Now - startTime;
                            double seconds = elapsedTime.TotalSeconds;

                            //MessageBox.Show("导出 Excel 消耗时间: " + seconds.ToString("F2") + " 秒");
                            MessageBox.Show("下载完成。" + "文件存放位置:" + savePath + "导出 Excel 消耗时间: " + seconds.ToString("F2") + " 秒");
                            // 打开文件
                            //System.Diagnostics.Process.Start(savePath);
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("下载出错:" + ex.Message);
                    }
                }
            }
		}

    }
}
相关推荐
一屉大大大花卷18 分钟前
初识Neo4j之入门介绍(一)
数据库·neo4j
周胡杰1 小时前
鸿蒙arkts使用关系型数据库,使用DB Browser for SQLite连接和查看数据库数据?使用TaskPool进行频繁数据库操作
前端·数据库·华为·harmonyos·鸿蒙·鸿蒙系统
wkj0011 小时前
navicate如何设置数据库引擎
数据库·mysql
赵渝强老师1 小时前
【赵渝强老师】Oracle RMAN的目录数据库
数据库·oracle
暖暖木头1 小时前
Oracle注释详解
数据库·oracle
御控工业物联网1 小时前
御控网关如何实现MQTT、MODBUS、OPCUA、SQL、HTTP之间协议转换
数据库·sql·http
小码编匠2 小时前
WPF 自定义分页控件,可通过样式模板修改外观
后端·c#·.net
GJCTYU3 小时前
spring中@Transactional注解和事务的实战理解附代码
数据库·spring boot·后端·spring·oracle·mybatis
MicroTech20253 小时前
微算法科技(NASDAQ: MLGO)探索Grover量子搜索算法,利用量子叠加和干涉原理,实现在无序数据库中快速定位目标信息的效果。
数据库·科技·算法
Code季风3 小时前
SQL关键字快速入门:CASE 实现条件逻辑
javascript·数据库·sql