You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#调用存储过程输出到控制台,如何写入文本/Excel后发送邮件

C# 实现存储过程结果写入文件+邮件发送方案

第一步:改造原有查询逻辑,收集查询结果

先把原方法中输出到控制台的内容统一收集到列表中,方便后续多场景复用:

private static List<string> GetEnrollmentMessages()
{
    List<string> messages = new List<string>();
    using (SqlConnection conn = new SqlConnection("你的数据库连接字符串"))
    {
        using (SqlCommand cmd = new SqlCommand("Enrollments", conn))
        {               
            conn.Open();
            cmd.CommandType = CommandType.StoredProcedure; 
            SqlDataReader reader = cmd.ExecuteReader();
            while (reader.Read())
            {
                // 处理空值避免运行时报错
                if (!reader.IsDBNull(reader.GetOrdinal("Message")))
                {
                    string message = reader.GetString("Message");
                    // 可保留原有控制台输出逻辑
                    Console.WriteLine(message);
                    messages.Add(message);
                }
            }
            conn.Close();
        }                
    }
    return messages;
}

第二步:写入文本文件

直接调用.NET内置的File类即可实现,无需引入第三方依赖:

// 自定义文本文件保存路径
string txtPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Enrollments.txt");
// 写入文件,默认采用UTF-8编码
File.WriteAllLines(txtPath, messages);

第三步:写入Excel文件

推荐两种适配不同需求的实现方式:

  • 无依赖轻量方案:写入CSV格式,Excel可直接识别打开
string csvPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Enrollments.csv");
// 可自定义CSV表头
List<string> csvContent = new List<string> { "消息内容" };
csvContent.AddRange(messages);
File.WriteAllLines(csvPath, csvContent, Encoding.UTF8);
  • 生成标准XLSX格式:可引入EPPlus NuGet包实现,示例代码如下:
string xlsxPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Enrollments.xlsx");
using (ExcelPackage package = new ExcelPackage(new FileInfo(xlsxPath)))
{
    ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("报名记录");
    // 写入表头
    worksheet.Cells[1, 1].Value = "消息内容";
    // 批量写入数据
    for (int i = 0; i < messages.Count; i++)
    {
        worksheet.Cells[i + 2, 1].Value = messages[i];
    }
    // 自动调整列宽
    worksheet.Cells.AutoFitColumns();
    package.Save();
}

第四步:发送带附件的邮件

使用.NET内置的SmtpClient实现,需替换为你实际使用的邮箱服务配置:

public static void SendEmailWithAttachment(string attachmentPath)
{
    // 邮件基础配置
    string smtpServer = "smtp.你的邮箱服务商.com"; // 比如smtp.qq.com、smtp.163.com
    int smtpPort = 587; // 多数服务商TLS端口为587,SSL端口为465
    string sendEmail = "你的发件邮箱地址";
    string sendPassword = "你的邮箱授权码"; // 注意不是邮箱登录密码,是邮箱服务商提供的专属授权码
    string receiveEmail = "收件人邮箱地址";

    using (MailMessage mail = new MailMessage())
    {
        mail.From = new MailAddress(sendEmail);
        mail.To.Add(receiveEmail);
        mail.Subject = "报名记录报表";
        mail.Body = "附件为最新的报名记录,请查收。";
        // 添加生成的文件作为附件
        mail.Attachments.Add(new Attachment(attachmentPath));

        using (SmtpClient smtp = new SmtpClient(smtpServer, smtpPort))
        {
            smtp.Credentials = new System.Net.NetworkCredential(sendEmail, sendPassword);
            smtp.EnableSsl = true;
            smtp.Send(mail);
        }
    }
}

整体调用示例

把所有逻辑串起来即可完成完整流程:

static void Main(string[] args)
{
    // 1. 从存储过程查询数据
    var messages = GetEnrollmentMessages();
    // 2. 写入文件(可任选文本/CSV/XLSX格式)
    string savePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Enrollments.csv");
    List<string> csvContent = new List<string> { "消息内容" };
    csvContent.AddRange(messages);
    File.WriteAllLines(savePath, csvContent, Encoding.UTF8);
    // 3. 发送带附件的邮件
    SendEmailWithAttachment(savePath);
}

内容的提问来源于stack exchange,提问作者sherwin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 10:39:03