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;
       

    }

  

posted @ 2017-05-17 09:35  wx_h13813744  阅读(407)  评论(0编辑  收藏  举报