• 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("-------------------------
    ");
                        fs.Write(buffer, 0, buffer.Length);
    
                        buffer = Encoding.Default.GetBytes(DateTime.Now.ToString() + "
    ");
                        fs.Write(buffer, 0, buffer.Length);
    
                        buffer = Encoding.Default.GetBytes("信息:" + msg + "
    ");
                        fs.Write(buffer, 0, buffer.Length);
    
                        if (ex != null)
                        {
                            buffer = Encoding.Default.GetBytes("成员名: " + ex.TargetSite + "
    ");
                            fs.Write(buffer, 0, buffer.Length);
    
                            buffer = Encoding.Default.GetBytes("引发异常的类: " + ex.TargetSite.DeclaringType + "
    ");
                            fs.Write(buffer, 0, buffer.Length);
    
                            buffer = Encoding.Default.GetBytes("异常信息: " + ex.Message + "
    ");
                            fs.Write(buffer, 0, buffer.Length);
    
                            buffer = Encoding.Default.GetBytes("引发异常的程序集或对象: " + ex.Source + "
    ");
                            fs.Write(buffer, 0, buffer.Length);
    
                            buffer = Encoding.Default.GetBytes("栈:" + ex.StackTrace + "
    ");
                            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;
           
    
        }
    

      

  • 相关阅读:
    2015.4.16-C#中ref和out的区别
    2015.4.10-SQL 高级查询(二)
    2015.4.10-C#入门基础(三)
    2015.4.8-C#入门基础(二)
    2015.4.7-C#入门基础(一)
    2015.4.2-SQL 简单语句(一)
    对GridView的某一列行进行操作。。
    jquery获取GridView中RadioButton选中的数据
    Ajax获取前台的数据
    前台验证
  • 原文地址:https://www.cnblogs.com/2186009311CFF/p/6865909.html
Copyright © 2020-2023  润新知