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; }
C# 基础:DataTable操作、发邮件的更多相关文章
- centos shell基础 alias 变量单引号 双引号 history 错误重定向 2>&1 jobs 环境变量 .bash_history source配置文件 nohup & 后台运行 cut,sort,wc ,uniq ,tee ,tr ,split, paste cat> 2.txt <<EOF 通配符 glob模式 发邮件命令mail 2015-4-8 第十二节课
centos shell基础知识 alias 变量单引号 双引号 history 错误重定向 2>&1 jobs 环境变量 .bash_history source配置文件 ...
- 代码控制打电话、发短信、发邮件、打开手机app等操作
很多时候我们需要利用我门自己的app进行一些打电话.发短信等的操作,那么如何利用代码实现呢,下面就介绍一些简单的方法来实现这些操作. 一.打电话: <1>最简单.最直接的方法----直接跳 ...
- python语言(六)mock接口开发、发邮件、写日志、新Excel操作
一.urllib模块 urllib模块是一个标准模块,直接import urllib即可,在python3里面只有urllib模块,在python2里面有urllib模块和urllib2模块. url ...
- python基础-发邮件smtp
先来想下发送邮件需要填写什么,还需要有什么条件1.与邮件服务器建立连接,用户名和密码2.发邮件:发件人,收件人,主题,内容,附件3.发送 使用第三方邮箱发送邮件 #! /usr/bin/env pyt ...
- Linux搭建smtp服务器+laravel5.2发邮件配置
/** * 这里主要是想通过自己搭建smtp服务器,配置laravel5.2框架,实现邮箱发邮件功能, * 主要内容是搭建smtp服务器,laravel5.2发邮件顺手提一下 */ /** * 1.l ...
- PHP实例开发(2)PHP通过mail()或Socket发邮件
PHP通过mail()或Socket发邮件 1.PHP中发送邮件的方法 PHP发送邮件是“非常的简单” 因为他提供了mail()函数直接发送,但这也继 register globals 成为了对初学者 ...
- IOS,发短信,发邮件,打电话
今天把APP里常用小功能 例如发短信.发邮件.打电话.全部拿出来简单说说它们的实现思路. 1.发短信实现打电话的功能,主要二种方法,下面我就分别说说它们的优缺点.1.1.发短信(1)——URL // ...
- ActiveMQ JMS 在发邮件中的使用
ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久 ...
- 【Python系列】Python自动发邮件脚本-html邮件内容
缘起 这段时间给朋友搞了个群发邮件的脚本,为了防止进入垃圾邮件,做了很多工作,刚搞完,垃圾邮件进入率50%,觉得还不错,如果要将垃圾邮件的进入率再调低,估计就要花钱买主机了,想想也就算了,先发一个月, ...
随机推荐
- word2vec (CBOW、分层softmax、负采样)
本文介绍 wordvec的概念 语言模型训练的两种模型CBOW+skip gram word2vec 优化的两种方法:层次softmax+负采样 gensim word2vec默认用的模型和方法 未经 ...
- MSSQL注入--反弹注入
明明是sql注入的点,却无法进行注入,注射工具拆解的速度异常的缓慢,错误提示信息关闭,无法返回注入的结果,这个时候你便可以尝试使用反弹注入, 反弹注入需要依赖于函数opendatasource的支持, ...
- ansible-playbook -l 选项
-l <SUBSET>, --limit <SUBSET> further limit selected hosts to an additional pattern 限制脚本 ...
- 【Linux 环境搭建】Ubuntu下安装tftp
1.安装软件 sudo apt-get install tftp-hpa tftpd-hap xinetd 2.修改配置文件 sudo vim /etc/default/tftpd-hpa ...
- 【烦人的字符集】linux字符集问题,中文乱码
[1]快速修改命令 [2]locale 查看现在服务器的字符 [root@Master ~]# localeLANG=en_US.UTF-8LC_CTYPE="zh_CN.UTF-8&quo ...
- Charles的app抓包配置和抓包节点为unknown、乱码、手机无法上网等问题的处理
关于手机端抓包配置Charles的一些配置,并且解决,请求存在unknown和内容为乱码的问题 关于请求节点为unknown.内容为乱码和手机端无法访问网络其实都是手机端证书配置问题导致,有的配置后还 ...
- ES6 系列之异步处理实战
前言 我们以查找指定目录下的最大文件为例,感受从 回调函数 -> Promise -> Generator -> Async 异步处理方式的改变. API 介绍 为了实现这个功能,我 ...
- 为什么要用消息队列 及 自己如何设计一个mq架构
1. 解耦:如左图, 系统a因为业务需求需要调用系统b,后续因为业务需求可能需要改代码调用系统c,甚至还要考虑被调用的系统挂了访问超时的问题.耦合性太高! 如右图, 系统a产生一条数据发送到消息队列里 ...
- c# WPF SVG 文件的引用(SharpVectors)
原文:c# WPF SVG 文件的引用(SharpVectors) 阿里巴巴矢量图标库提供了大量的 SVG 图标:https://www.iconfont.cn/ 但是 WPF 本身不支持 SVG 格 ...
- jQuery之操作样式的css方法
注意点都在代码里 <style> div { width: 200px; height: 200px; background-color: pink; } </style> & ...