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);
                    }
                }
            }
		}

    }
}
相关推荐
嘘神秘用6 小时前
布:AI 驱动的 Redis 客户端,更快、更直观
数据库·人工智能·redis
东北小狐狸-Hellxz8 小时前
Redis 哨兵搭建+ACL权限控制
数据库·redis
研究员子楚9 小时前
GEO行业发展标准体系白皮书V2.0-第09卷 · 适配篇:硅基主权伦理宪章与行业适配宣言
数据库·人工智能·geo
LibraJM9 小时前
一种适合程序员的 Agent 协作方式的实践
c#·copilot·agents
l1340620823510 小时前
鸿蒙实战:RDB 数据库设计与 DatabaseService
数据库·华为·harmonyos·鸿蒙系统
山峰哥10 小时前
数据库工程与索引策略实战指南‌
服务器·数据库·sql·oracle·深度优先
谙忆11 小时前
图片版权保护工程实战:明水印、盲水印(DCT隐写)、Referer防盗链与签名URL怎么落地
数据库
KaMeidebaby11 小时前
卡梅德生物技术快报|抗体合成:多肽抗体合成工程化方案:Nsp2 保守肽多抗制备与多维度验证
前端·网络·数据库·人工智能·算法
xfhuangfu11 小时前
19c CDB架构下的数据库启动和停止
数据库·架构
神道君天下11 小时前
填充与积累:积分与面积的可视化
数据库·oracle