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

    }
}
相关推荐
罗光记12 小时前
全能 Go Agent 框架 Covonaut v1.1.2发布:终端对话加入旁问与三档输出
数据库·经验分享·其他·百度·新浪微博
fujisheng66112 小时前
FUI 导航实践:拆开 Layer、History、Coverage 与 Cache 的组合语义
c#·unity3d
Htr_13 小时前
Anysite.io 使用指南:把整个 Web 变成 AI 智能体的数据库
前端·数据库·人工智能
Lyra_Infra13 小时前
记一次麒麟 Linux 下达梦数据库 (DM8) 部署与 MySQL 命令行无界面迁移踩坑指南
数据库·后端·dba
晚安日记wanna13 小时前
只会答加索引MySQL 调优还能聊这 7 个点
数据库·面试
YHHLAI13 小时前
从零理解 Agent Memory 管理:内存记忆、文件持久化与上下文截断
数据库·oracle
cspttty13 小时前
2026市场分析师校招能力模型:SQL、Excel、BI与业务分析
大数据·数据库
AIGC大时代14 小时前
OpenAI Agents SDK 工程笔记:tool 调用循环、max_turns 与生产禁区
服务器·数据库·笔记·tool·max_turns·functiontool·生产禁区
zcmodeltech14 小时前
能源电力沙盘模型控制系统设计——基于STM32与Modbus RTU的“发—输—变—配—用”全链条动态展示方案
数据库·stm32·单片机·嵌入式硬件·能源
李兆龙的博客14 小时前
从一到无穷大 #91:从 Habitat 看存储平台的整合与分工
数据库·人工智能·架构