C# 基础:DataTable操作、发邮件

本文出自:https://www.cnblogs.com/2186009311CFF/p/6865909.html

DataTable操作

据参数删除为0的列:包括遍历、删除、取值

   public static DataTable GetNonzeroColDataTable(DataTable dt, Dictionary<string, string> chargeWayDic= null )
        {
            DataTable newdt = new DataTable();
            try
            {
                #region  对筛选结果全部为0的列进行删除
                List<string> delColAlist = new List<string>();//列值为0的列名的动态数组                    
                bool IsZero = false;//列值为0的标志
                for (int ic = 0; ic < dt.Columns.Count; ic++)
                {
                    string strColumnName = dt.Columns[ic].ColumnName;
                    for (int jr = 0; jr < dt.Rows.Count; jr++)
                    {
                        if (chargeWayDic != null)//指定了一些列进行检查
                        {
                            #region 指定了一些列进行检查
                            if (!chargeWayDic.Keys.Contains(strColumnName)) continue;
                            double  ivCompare = double.Parse(dt.Rows[jr][ic].ToString());
                            if (ivCompare == 0)
                            {
                                IsZero = true;
                                if ((jr == (dt.Rows.Count - 1)) && (IsZero))
                                {
                                    if ((!delColAlist.Contains(strColumnName)) && (chargeWayDic.Keys.Contains(strColumnName)))
                                        delColAlist.Add(strColumnName);
                                }
                                continue;
                            }
                            else
                            {
                                IsZero = false;
                                break;
                            }                            
                            #endregion
                        }
                        else//对所有列进行检查
                        {
                            try
                            {
                                double ivCompare = double.Parse(dt.Rows[jr][ic].ToString());
                                if (ivCompare == 0)
                                {
                                    IsZero = true;
                                    if ((jr == (dt.Rows.Count - 1)) && (IsZero))
                                    {
                                        if (!delColAlist.Contains(strColumnName))
                                            delColAlist.Add(strColumnName);
                                    }
                                    continue;
                                }
                                else
                                {
                                    IsZero = false;
                                    break;
                                }                               
                            }
                            catch //不是数字的列忽略
                            {
                                break;
                            }
                        }
                        
                    }
                }
                newdt=GetNewDataTable(dt, delColAlist);
                delColAlist.Clear();
                #endregion
                return newdt;//返回的查询结果
            }
            catch
            {               
                return dt;
            }
        }

  

 public static DataTable GetNewDataTable(DataTable dt, List<string> deleteColList)
        {
            DataTable newdt = new DataTable();
            try
            {
                if (deleteColList != null)
                {
                    if (dt != null)
                    {
                        foreach (string sdeleteCol in deleteColList)
                        {
                            if (!String.IsNullOrEmpty(sdeleteCol))
                            {
                                if (dt.Columns.Contains(sdeleteCol))
                                {
                                    dt.Columns.Remove(sdeleteCol);//删除某列
                                }
                            }

                        }                      
                    }
                    deleteColList.Clear();
                }

                newdt = dt.Clone();
                DataRow[] dr = dt.Select();
                for (int i = 0; i < dr.Length; i++)
                {
                    newdt.ImportRow((DataRow)dr[i]);
                }
                return newdt;//返回的查询结果
            }
            catch (Exception ex)
            {
                // MessageBox.Show(ex.Message);
                return newdt;
            }
        }

  包括遍历、删除、取值、列位置设置、新增列

 DataColumn dataColumn = new DataColumn(列名变量);
                        var colIndex = table.Columns.IndexOf("列名");
                        table.Columns.Add(dataColumn);
                        dataColumn.SetOrdinal(colIndex);//列的位置
                        foreach (DataRow dR in table.Rows)
                        {
                            double dpaper = 0;
                            foreach (DataColumn col in table.Columns)
                            {
                                if (col.ColumnName.Contains ("元"))
                                {
                                    string strColumnName = col.ColumnName.Substring(0, col.ColumnName.Length - 3); ;//列名去掉(元)
                                    if (Dictionary.Keys.Contains(strColumnName))
                                    {
                                        dpaper += (double.Parse(dR[col.ColumnName].ToString()));
                                    }
                                }                               
                            }
                            dR[列名变量] = (double.Parse(dR["列名"].ToString())) - dpaper;
                        }
                        table.Columns.Remove("删除列");                       

 发邮件:实际操作注重灵活运用,需要建公共类的思想

 static void Main(string[] args)
        {
           
            Addresser m_Addresser = new Addresser();
            m_Addresser.User = "发件人账户";
            m_Addresser.SendMailType = "qq";//发件人账户类型,此处为qq邮箱
            m_Addresser.AuthorizationCode = "发件人授权码";//设置里开启STMP发信息获取
            Addressee m_Addressee = new Addressee();
            m_Addressee.User = "收件人账户";
            m_Addressee.SendMailType = "163";//收件人账户类型,此处为163邮箱           
            MailContent m_MailContent = new MailContent();
            m_MailContent.Tittle = "邮件主题";
            m_MailContent.Subject  = "邮件副标题";
            m_MailContent.Body = "邮件内容";
            
            SendQQMail.SendMail(m_Addresser,m_Addressee, m_MailContent);//发送邮件
        }

  

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Mail;
using System.Text;
using System.Threading.Tasks;
using static System.Net.Mime.MediaTypeNames;

namespace SchemeOptimization.SendMail
{
    public  class SendQQMail
    {
        public  static   void SendMail(Addresser m_Addresser,Addressee m_Addressee, MailContent m_mailContent)
        {
            try
            {
                MailMessage msg = new MailMessage();
                string addressee = m_Addressee.User + "@" + m_Addressee.SendMailType + ".com";
                string addresser = m_Addresser.User + "@" + m_Addresser.SendMailType + ".com";
                msg.To.Add(addressee);//收件人
                msg.CC.Add(addressee);//抄送人

                msg.From = new MailAddress(addresser, m_mailContent.Tittle );

                msg.Subject = m_mailContent.Subject;
                //标题格式为UTF8  
                msg.SubjectEncoding = Encoding.UTF8;

                msg.Body = m_mailContent.Body ;
                //内容格式为UTF8 
                msg.BodyEncoding = Encoding.UTF8;

                SmtpClient client = new SmtpClient();
                //SMTP服务器地址 
                client.Host = "smtp."+ m_Addresser.SendMailType + ".com";//发件人的邮件类型
                //SMTP端口,QQ邮箱填写587  
                if (m_Addresser.SendMailType == "qq")//发件人的邮件类型对应的端口号
                {
                    client.Port = 587;
                }
                else {
                    client.Port = 25;
                }
               
                //启用SSL加密  
                client.EnableSsl = true;

                client.Credentials = new NetworkCredential(addresser, m_Addresser.AuthorizationCode);
                //发送邮件  
                client.Send(msg);
                //client.SendAsync(msg);
                msg.Dispose();
            }
            catch (Exception ex)
            {
                WriteException(ex);
            }
            
        }
        /// <summary>
        /// 写错误日志
        /// </summary>
        /// <param name="ex">异常</param>
        /// <param name="msg">其他内容</param>
        /// <param name="typestr">文件名</param>
        public static void WriteException(Exception ex, string msg = "", string typestr = "")
        {
            try
            {
                if (!Directory.Exists("日志"))
                    Directory.CreateDirectory("日志");              
                using (
                    FileStream fs = File.Open(string.Format(".//日志\\Log_{0}.txt", DateTime.Now.ToString("yyyyMMdd")), FileMode.OpenOrCreate, FileAccess.ReadWrite))
                {
                    fs.Seek(0, SeekOrigin.End);
                    byte[] buffer = Encoding.Default.GetBytes("-------------------------\r\n");
                    fs.Write(buffer, 0, buffer.Length);

                    buffer = Encoding.Default.GetBytes(DateTime.Now.ToString() + "\r\n");
                    fs.Write(buffer, 0, buffer.Length);

                    buffer = Encoding.Default.GetBytes("信息:" + msg + "\r\n");
                    fs.Write(buffer, 0, buffer.Length);

                    if (ex != null)
                    {
                        buffer = Encoding.Default.GetBytes("成员名: " + ex.TargetSite + "\r\n");
                        fs.Write(buffer, 0, buffer.Length);

                        buffer = Encoding.Default.GetBytes("引发异常的类: " + ex.TargetSite.DeclaringType + "\r\n");
                        fs.Write(buffer, 0, buffer.Length);

                        buffer = Encoding.Default.GetBytes("异常信息: " + ex.Message + "\r\n");
                        fs.Write(buffer, 0, buffer.Length);

                        buffer = Encoding.Default.GetBytes("引发异常的程序集或对象: " + ex.Source + "\r\n");
                        fs.Write(buffer, 0, buffer.Length);

                        buffer = Encoding.Default.GetBytes("栈:" + ex.StackTrace + "\r\n");
                        fs.Write(buffer, 0, buffer.Length);
                    }


                    fs.Close();
                }
            }
            catch
            { }
        }
       
    }
    /// <summary>
    /// 收件人
    /// </summary>
    public class Addressee
    {
        /// <summary>
        /// 账号
        /// </summary>           
        public string User;
        /// <summary>
        /// 发送邮件类型
        /// </summary>          
        public string SendMailType;
    }
    /// <summary>
    /// 发件人
    /// </summary>
    public class Addresser
    {
        /// <summary>
        /// 
        /// </summary>           
        public string User;
        /// <summary>
        /// 
        /// </summary>          
        public string SendMailType;
        /// <summary>
        /// 授权码,在设置里开启SMIP服务
        /// 服务器响应为:mail from address must be same as authorization user
        /// 是因为没有设置开启SMIP服务
        /// </summary>
        public string AuthorizationCode;

    }
    public class MailContent
    {
        /// <summary>
        /// 
        /// </summary>           
        public string Tittle;
        /// <summary>
        /// 
        /// </summary>          
        public string Subject;
        /// <summary>
        /// 
        /// </summary>           
        public string Body;
       

    }

  

转载于:https://www.cnblogs.com/2186009311CFF/p/6865909.html

C# DataTable生成excel并将excel添加附件发送邮件 C# 先将从数据库中获取数据转成DataTable然后将DataTable生成excel,并将excel添加附件发送邮件 立即下载

相关推荐

Andriod应用开发基础项目——记账本

本项目采用Java语言编写,是一款基于Android Studio开发的简易项目,本项目可以提高Java语言编写软件的能力,同时加深对开发软件Android studio有了更深层次的掌握,很适合初学者。在项目过程中,遇到了一些挑战和问题,但通过不断的努力和学习,最终取得了成功。未来,可以还可以继续优化App的功能和性能,增加更多实用的功能,提升用户体验。

eryasd的博客 3468

c#邮件发送,将Table转换成表格的案例分享,超实用

public string ConvertDatatableToHtml(DataTable filedt) //转换成HTML格式发送 { string desc = ""; if (filedt != null && filedt.Rows.Count != 0) { ...

qq_25763631的博客 2184

citespace基本操作

聚类分析 时间线图 这些结果都是高被引文献的相关呈现结果,代表该领域的文献基础 下面可以看看该project的前沿领域 选择keywords 和term go! 调整显示方式 生成凸线图:表示 在某个研究领域或者时间段内 ,大家对某个领域或者某个词的关注度突然增高,凸显前沿方向的转变 以此来发现热点 ...

生信小博士的博客 1万+

C#绘制表格并发送邮件功能

public bool SendMail(string code, DataTable dt) { string strAutoClearToMailList = "";//自动清算通知邮箱列表 DataRow drTemp =null; //获取发送邮箱 if("1062".Equals(code)) GetAlter("REPORT", "Report_1062", ...

AndroidOrCsharp 3191

activemq_CVE-2015-5254_漏洞复现_源码分析

ActiveMQ-CVE-2015-5254

qq_51550750的博客 940

ESP32-CAM实战:从零构建高精度QR二维码识别系统

本文详细介绍了如何使用ESP32-CAM构建高精度QR二维码识别系统,涵盖硬件配置、开发环境搭建、二维码识别库选择与优化、完整系统实现及实战问题排查。通过优化识别算法和电源管理,系统可实现快速、稳定的二维码识别,适用于物联网设备绑定等场景。

weixin_42524703的博客 433

C#数据库转表格作为附件发送邮件。datatable转excel添加附件

C#数据库转表格作为附件发送邮件。datatable转excel添加附件,新手向

weixin_a18297652723的博客 2070

Android Studio安装常见问题详解——Android Emulator Hypervisor Driver for AMD Processors installation failed.

目录一、问题描述二、解决方案2.1 开启CPU虚拟化2.2 禁用Hyper-V2.3 使用管理员命令行在驱动程序包中执行“silent_install.bat” 一、问题描述 新买的AMD轻薄本,在安装Android Studio时遇到问题: Android Emulator Hypervisor Driver for AMD Processors installation failed. 笔记本配置为: 二、解决方案 2.1 开启CPU虚拟化 设置虚拟化的步骤这里不进行详细介绍了。如果需要,可以自行百

Wendy的博客 4万+

C# DataTable用法详解

文章目录前言一、DataTable是什么?二、常用的属性及方法1.常用属性2.常用方法三、常用的使用方法1.创建2.读入数据总结 前言 目前我接触到的项目中好多都用DataTable,所以我来记录一下DataTable的一些优点,及使用方法。 一、DataTable是什么? DataTable 是一个临时保存数据的网格虚拟表,表示内存中数据的一个表,是一个二维表,也是一个后台数据源和前台显示之间的适配器。 二、常用的属性及方法 1.常用属性 CaseSensitive 指示表中的字

five_s的博客 4万+

[RK3568 Android11] 开发之调试RK809 codec音频-SPK喇叭

目录 前言 一、注册声卡顺序 二、SPK喇叭路由配置 三、tinyalsa调试工具 前言 瑞芯微RK809是一种复杂的功率管理集成电路(PMIC)集成编解码器,适用于由外部电源供电的多核系统应用;同时它也集成了音频编解码器,这样在硬件设计上可以直接使用RK809 codec功能,不必再外挂个其他codec芯片;RK809 codec不仅支持SPK,还支持耳机,MIC功能; 一、注册声卡顺序 设备树dts里面原厂帮我们配置好了rk809_sound,我们直接...

~未来可期~ 7414

[系统安全] 四十七.恶意软件分析 (3)动态分析经典沙箱Cape的安装和基础用法详解

系统安全将更好地帮助初学者了解病毒逆向分析和系统安全。前文详细介绍恶意代码静态分析经典工具Capa的基础用法,以及批量提取静态特征和ATT&CK技战术,主要是从提取的静态特征Json文件中提取关键特征。这篇文章将详细讲解动态分析沙箱Cape,其是一个开源的自动恶意软件分析系统,通过自动运行和分析恶意软件,全面分析和提取恶意软件的关键特征。本文先介绍Cape沙箱的安装和基础用法,后续随着深入再分享。基础性文章,希望对您有帮助!

杨秀璋的专栏 6738

C# DataTable

C# DataTable 的详细操作

Ryangfeng 1万+

单智能体篇:Prompt工程艺术

模型在接收到 Prompt 时会自动扮演“角色”,角色定义的好坏直接影响智能体输出的风格和专业性。角色定义的重要性让智能体具备明确身份,例如“你是一位专业理财顾问”或“你是一个幽默的文案创作助手”。角色限定了模型知识输出的范围,使回答更专业、更贴合预期。实战示例模糊Prompt给我一些投资建议。你可以投资股票或者基金。优化Prompt你是一位具有10年经验的专业理财顾问,请给我针对30岁男性,年收入20万,风险偏中等的投资组合建议。

公众号:AI前沿侦探 1304

C#中对datatable的操作

 一、创建DataTable   //创建一个空表 DataTable dt = new DataTable(); //创建一个名为"Table_New"的空表 DataTable dt = new DataTable("Table_New"); 二、创建列 //1.创建空列 DataColumn dc = new DataColumn(); dt.Colum

whaxrl的专栏 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

c#操作DataTable

c#操作DataTable //创建datatable         DataTable dt = new DataTable("king");         //添加列方法1         //添加一列列名为id,类型为string         dt.Columns.Add("id", System.Type.GetType("System.String"));//直接为表创

ZLHZHJ的专栏 1077

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

C# DataTable 去重

C# DataTable 的一些用法 去重 DataTable datatable = new DataTable(); datatable.DefaultView.ToTable(true); 未完,查看如些页面 https://www.cnblogs.com/Fooo/p/6666825.html?utm_source=itdadao&utm_medium=referral

u012577058的博客 6072

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

C# DataTable简单缓存 操作

public class DataCache { //检验成功 public static DataTable table_a = new DataTable(); //校验失败 public static DataTable table_b = new DataTable(); public DataCa...

刘欢的博客 1608

C#连接数据库并使用datatable进行统一操作

1. C#连接数据库需要用到Connection、command、Reader对象。典型的建立数据库访问流程如下图所示。(这里使用DataReader)进行测试。 sqlserver的链接字符串: // 1. 连接数据库的URL,@的意思就是后面所有的字符都不进行转义。 public static string CON_URL = @"Provider=SQLOLEDB;Data Source=hkjhk65\MYSQLSERVER;Integrated Security=SSPI;Initial Cata

weixin_43899635的博客 3853

c# Linq操作DataTable

转载:c# Linq操作DataTable_lcawen的专栏-优快云博客在平时的工作中,可能有很多情况下要对DataTable的里面的数据进行处理,最简单的例子如:对DataTable中的某个字段进行排序,根据条件筛选DataTable中的数据。。。,例子很多,下面我们看看如何处理的: 这是我最初写的代码:代码publicstaticIEnumerablegetEnumerable(){Datahttps://blog.youkuaiyun.com/lcawen88/articl...

橙-极纪元-JJYCheng 2262

C# DataTable中的计算函数

在日常开发中很少使到DataTable实现业务,因此知道DataTable的用法并不多,除了普通的查询以及排序。现在分享一个DataTable中的运算函数Compute,它能帮助我们直接使用DataTable进行求和、求个数等操作,这对于数据后加工挺有效果,因此分享一下,用法如下: 函数名:Compute 参数1:expression 表达式 参数2:filter 条件表达式 如:data

专注搬砖-终身学习 5633

c#关于DATATABLE,操作详解

public void CreateTable() { //创建表 DataTable dt = new DataTable(); 方法二:为已有DateTable添加一新列,其值可设为默认值,也可设这列不可为空。 方法三:筛选DataTable中的数据,使用 Select()方法,把赛选结果可以保存到 DataRow[] drArr; 数据里面,也可以另存为一个新DataTable 方法四:对DataTable筛选指定字段,并保存为新表 方法五:对DataTable进行排序设置(sort)...

weixin_44035651的博客 1万+

C#对DataGridView中的数据进行添加、修改、删除操作c#操作datatable

1.创建表 DataSet ds=new DataSet(); DataTable dt=new DataTable("User"); ds.Add(dt); dt.Columns.Add("user_name",typeof(string)); dt.Columns.Add("user_password",typeof(string)); dt.Columns.Add("user_p

冷月宫主的专栏 1万+

C#在DataTable中使用LINQ

C#在DataTable中使用LINQ LINQ 查询适用于实现的数据源IEnumerable<T>接口或System.Query.IQueryable接口。 DataTable类默认是没有实现以上接口的。 所以要在DataTable中使用LINQ查询,需要调用一下AsEnumerable方法,返回一个EnumerableRowCollection<DataRow&gt...

cxu123321的博客 7820
上一篇: WPF 远程显示原图 当前主页面 工具栏 一个Window页面的元素适用一个效果
下一篇: MYSQL应用
aoyangang9708
博客等级 码龄10年 2粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值