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%,觉得还不错,如果要将垃圾邮件的进入率再调低,估计就要花钱买主机了,想想也就算了,先发一个月, ...
随机推荐
- 快速编写 <a> ————CSS3
a{ text-decoration:none; } a:link{ color:white; } a:visited { color:white; } a:hover { color:blue; } ...
- java8--- Optional的使用
// https://www.jianshu.com/p/82ed16613072 1.Optional.of(T value),传入非 null(否则会抛出 NullPointerException ...
- JS基础篇--JS获取元素的宽高以及offsetTop,offsetLeft等的属性值
$(obj).width()与$(obj).height() $(obj).width()与$(obj).height() :jquery方式获取元素的宽高,不包括滚动条与工具条 $(obj).wid ...
- P1056排坐椅
这是2008普及组真题,是一个提高—的模拟. 仔细读完题便有了思路:累放在i行能隔开wi个,比较排序wi,输出即可.所以在这里遇到了结构体排序的问题与手写cmp的问题.对于两个语法知识掌握得都不好,所 ...
- [集合]Map的 entrySet() 详解以及用法(四种遍历map的方式)
Entry 由于Map中存放的元素均为键值对,故每一个键值对必然存在一个映射关系. Map中采用Entry内部类来表示一个映射项,映射项包含Key和Value (我们总说键值对键值对, 每一个键值对也 ...
- linux下occi操作oracle数据库,中文乱码的问题
转载:http://www.linuxidc.com/Linux/2008-02/11238.htm 前几日调通了OCI连接数据库的问题后,用Oracle自带的例子测试了一下,能正常读取数据(都是英文 ...
- PY 个板子计划【雾
各类板子计划 A+B √ 放个鬼的链接[雾 欧拉筛 √ https://www.cnblogs.com/Judge/p/11690114.html 树状数组 √ 惨痛的教训,以后咱打数据结构的时候绝对 ...
- js倒计时跳转jquery插件版
<script type="text/javascript" src="js/jquery1.91.min.js"></script> ...
- django2.0变动数据库设置外键报错
1.报错TypeError: __init__() missing 1 required positional argument: 'on_delete' django2.0以后创建数据库外键的时候必 ...
- 【React 6/100】 React原理 | setState | JSX语法转换 | 组件更新机制
****关键字 | setState | JSX语法转换 | 组件更新机制 组件更新机制 setState() 的两个作用 修改state 更新组件 过程:父组件重新渲染时,也会重新渲染子组件,但只会 ...