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

    }
}
相关推荐
唐青枫11 小时前
别再乱用 StartNew:C#.NET TaskFactory 任务调度实战详解
c#·.net
Artech19 小时前
[MAF预定义的AIContextProvider-03]ChatHistoryMemoryProvider——赋予Agent从经验中学习的能力
ai·c#·agent·memory·maf
倔强的石头_2 天前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库
冬奇Lab2 天前
每日一个开源项目(第134篇):Zvec - 阿里开源的嵌入式向量数据库,向量搜索界的 SQLite
数据库·人工智能·llm
Scout-leaf2 天前
C#摸鱼实录——IoC与DI案例详解
c#
咕白m6253 天前
使用 C# 在 Excel 中应用多种字体样式
后端·c#
ClouGence3 天前
Oracle CDC 架构优化:从主库直连到 DataGuard 备库同步
数据库·后端·oracle
Artech3 天前
[MAF预定义的AIContextProvider-02]AgentSkillsProvider——将Agent Skills引入MAF
ai·c#·agent·agent skills·maf
无响应de神3 天前
三、用户与权限管理
数据库·mysql
Non-existent9873 天前
WPS批量清理单元格空白字符的4种方法-异常数字格式处理-实战
excel·wps