C#WindowsForm 不会自动建立app.config配置文件,需要手动添加。
因为部分内容要做成可配置,所以这里需要用到app.config
效果如下:

主要代码如下:
form1

using System;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Reflection;
using Microsoft.Office.Core;
using Microsoft.Office.Interop.Excel;
using System.Configuration;
using System.Linq;
using System.IO;
using System.Net.Mail;
namespace Test07
{public partial class Form1 : Form{public static int effectedRows = 0;public static int effectedRowsFirstAndTwo = 0;public Form1(){InitializeComponent();}private void Form1_loading(object sender, EventArgs e){log.Items.Add("=====loading data=====");dataGridView1.DataSource = null;}private void button1_Click(object sender, EventArgs e){//创建命令重建对象// SqlCommandBuilder scb = new SqlCommandBuilder(adapter);//更新数据try{//updatelog.Items.Add("=====update 3,4====");string str = ConfigurationManager.ConnectionStrings["db_conn"].ConnectionString;SqlConnection conn = new SqlConnection(str);string update34 = File.ReadAllText(GetPath("update34.sql"));log.Items.Add(update34);string code = File.ReadAllText(GetPath("code.txt"));log.Items.Add(code);update34 = update34.Replace("{code}", code);log.Items.Add(update34);conn.Open();SqlCommand cmd = new SqlCommand(update34, conn);cmd.CommandTimeout = 10000;effectedRows = cmd.ExecuteNonQuery();log.Items.Add("effect row : " + effectedRows + "row");log.Items.Add("=====update 1,2====");string update12 = File.ReadAllText(GetPath("update12.sql"));update12 = update12.Replace("{code}", code);log.Items.Add(update12);SqlCommand cmdFirstAndTwo = new SqlCommand(update12, conn);cmdFirstAndTwo.CommandTimeout = 10000;effectedRowsFirstAndTwo = cmdFirstAndTwo.ExecuteNonQuery();log.Items.Add("effect row : " + effectedRowsFirstAndTwo + "row");//querylog.Items.Add("=====query result====");string query = File.ReadAllText(GetPath("query.sql"));query = query.Replace("{code}", code);log.Items.Add(query);SqlCommand sqlcmd = new SqlCommand(query, conn);sqlcmd.CommandTimeout = 1000000;SqlDataAdapter readData = new SqlDataAdapter(sqlcmd);DataSet dtSetEnd = new DataSet();readData.Fill(dtSetEnd);System.Data.DataTable Table = dtSetEnd.Tables[0];log.Items.Add("=====query end====");log.Items.Add("export excel");string fileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "update" + DateTime.Now.ToString("yyyy-MM-dd") + ".csv");File.AppendAllText(fileName, "");dataGridView1.DataSource = Table;SaveCSV(Table, fileName);sendMail(fileName);log.Items.Add("=====End All=====");}catch (SqlException ex){MessageBox.Show(ex.Message);}}//send Mailpublic static void sendMail(string fileName){System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();string[] ToUser = ConfigurationManager.AppSettings["mail_to"].Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);string[] CCUser = ConfigurationManager.AppSettings["mail_cc"].Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);string Form = ConfigurationManager.AppSettings["mail_from"];string ToUserSum = null;string CCUserSum = null;//string ToUserSum = String.Join(",", ToUser);for (int i = 0; i < ToUser.Length; i++){msg.To.Add(ToUser[i]);ToUserSum += ToUser[i] + ',';}for (int i = 0; i < CCUser.Length; i++){msg.CC.Add(CCUser[i]);CCUserSum = CCUser[i] + ',';}msg.From = new MailAddress(Form, ConfigurationManager.AppSettings["mail_from_name"], System.Text.Encoding.UTF8);msg.Subject = "促销券" + DateTime.Now.ToString("yyyy-MM-dd");//title    msg.SubjectEncoding = System.Text.Encoding.UTF8;//title encode    msg.Body = "<div>Hi Alex</div><p>所有券已更新</p>已使用券共" + effectedRows + "用DominosMarkRepeat-" + DateTime.Now.ToString("yyyyMMdd") + "标记<br/>未使用券共" + effectedRowsFirstAndTwo + "用DominosMarkOLOUsed-" + DateTime.Now.ToString("yyyyMMdd") + "标记<br/>BR<p>---Denglin</p>";//body    msg.BodyEncoding = System.Text.Encoding.UTF8;//contentencode    msg.IsBodyHtml = true;// Is html?  msg.Priority = MailPriority.Normal;//priority msg.Attachments.Add(new Attachment(fileName));SmtpClient client = new SmtpClient();client.Credentials = new System.Net.NetworkCredential("yourusername", "password");//regMail and password   client.Host = "smtp.exmail.qq.com";object userState = msg;try{//client.SendAsync(msg, userState);client.Send(msg);MessageBox.Show("mail send success");}catch (System.Net.Mail.SmtpException ex){MessageBox.Show(ex.Message);}}private static void ExportLog(string msg){//log.Items.Add("update end");}private static string GetPath(string fileName){return Path.Combine(AppDomain.CurrentDomain.BaseDirectory, fileName);}public static void SaveCSV(System.Data.DataTable dt, string fileName){FileStream fs = new FileStream(fileName, System.IO.FileMode.Create, System.IO.FileAccess.Write);//读取文件,fileMode类型为Create即先删除后新建,fileAccess权限为写StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default);//转下编码string data = "";//write colDatafor (int i = 0; i < dt.Columns.Count; i++){data += dt.Columns[i].ColumnName.ToString();if (i < dt.Columns.Count - 1){data += ",";}}sw.WriteLine(data);//weite RowDataif (dt.Rows.Count > 0){Console.WriteLine("start write rows data");for (int i = 0; i < dt.Rows.Count; i++){data = "";for (int j = 0; j < dt.Columns.Count; j++){data += dt.Rows[i][j].ToString() == "" ? "null" : dt.Rows[i][j].ToString();if (j < dt.Columns.Count - 1){data += ",";}}sw.WriteLine(data);}}else{Console.WriteLine("data empty");}sw.Close();fs.Close();}public void DataGridViewEnablePaste(DataGridView p_Data){if (p_Data == null)return;p_Data.KeyDown += new KeyEventHandler(p_Data_KeyDown);}public static void DataGirdViewCellPaste(DataGridView DBGrid){try{// 获取剪切板的内容,并按行分割  string pasteText = "";pasteText = Clipboard.GetText();MessageBox.Show(pasteText);if (string.IsNullOrEmpty(pasteText))return;if (pasteText == "pasteText"){return;}int tnum = 0;int nnum = 0;//获得当前剪贴板内容的行、列数搜索for (int i = 0; i < pasteText.Length; i++){if (pasteText.Substring(i, 1) == "\t"){tnum++;}if (pasteText.Substring(i, 1) == "\n"){nnum++;}}Object[,] data;//粘贴板上的数据来自于EXCEL时,每行末都有\n,在DATAGRIDVIEW内复制时,最后一行末没有\nif (pasteText.Substring(pasteText.Length - 1, 1) == "\n"){nnum = nnum - 1;}tnum = tnum / (nnum + 1);data = new object[nnum + 1, tnum + 1];//定义一个二维数组String rowstr;rowstr = "";//MessageBox.Show(pasteText.IndexOf("B").ToString());//对数组赋值for (int i = 0; i < (nnum + 1); i++){for (int colIndex = 0; colIndex < (tnum + 1); colIndex++){//一行中的最后一列if (colIndex == tnum && pasteText.IndexOf("\r") != -1){rowstr = pasteText.Substring(0, pasteText.IndexOf("\r"));}//最后一行的最后一列if (colIndex == tnum && pasteText.IndexOf("\r") == -1){rowstr = pasteText.Substring(0);}//其他行列if (colIndex != tnum){rowstr = pasteText.Substring(0, pasteText.IndexOf("\t"));pasteText = pasteText.Substring(pasteText.IndexOf("\t") + 1);}data[i, colIndex] = rowstr;}//截取下一行数据pasteText = pasteText.Substring(pasteText.IndexOf("\n") + 1);}//获取当前选中单元格所在的列序号int curntindex = DBGrid.CurrentRow.Cells.IndexOf(DBGrid.CurrentCell);//获取获取当前选中单元格所在的行序号int rowindex = DBGrid.CurrentRow.Index;//MessageBox.Show(curntindex.ToString ());for (int j = 0; j < (nnum + 1); j++){for (int colIndex = 0; colIndex < (tnum + 1); colIndex++){if (!DBGrid.Columns[colIndex + curntindex].Visible){continue;}if (!DBGrid.Rows[j + rowindex].Cells[colIndex + curntindex].ReadOnly){DBGrid.Rows[j + rowindex].Cells[colIndex + curntindex].Value = data[j, colIndex];}}}Clipboard.Clear();}catch{Clipboard.Clear();//MessageBox.Show("粘贴区域大小不一致");return;}}public void p_Data_KeyDown(object sender, KeyEventArgs e){if (Control.ModifierKeys == Keys.Control && e.KeyCode == Keys.V){if (sender != null && sender.GetType() == typeof(DataGridView))// 调用上面的粘贴代码DataGirdViewCellPaste((DataGridView)sender);}else{Clipboard.SetDataObject(dataGridView1.GetClipboardContent().GetData(DataFormats.Text).ToString());};}public void p_Data_KeyUp(object sender, KeyEventArgs e){if (e.KeyCode == Keys.C && e.Modifiers == Keys.Control){Clipboard.SetText(this.dataGridView1.GetClipboardContent().GetData(DataFormats.Text).ToString());}}private void listBox1_SelectedIndexChanged(object sender, EventArgs e){}}
}

app.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration><connectionStrings><add name="db_conn" connectionString="server=10.1.1.2344;database=DB_wdl;uid=wdl;pwd=111111;MultipleActiveResultSets=true"/></connectionStrings><appSettings><add key="IfNewAdd" value="1"/><add key="mail_from" value="denglin.wang@edaysoft.cn"/><add key="mail_from_name" value="wangdenglin"/><add key="mail_to" value=""/><add key="mail_cc" value="denglin.wang@edaysoft.cn"/><add key="mail_host" value="smtp.exmail.qq.com"/><add key="mail_uid" value="denglin.wang@edaysoft.cn"/><add key="mail_pwd" value="password"/></appSettings>
</configuration>

以上就是主要代码

dataGridView 粘贴数据并更新到数据库及发送邮件(二)相关推荐

  1. dataGridView 粘贴数据并更新到数据库及发送邮件

    直接上代码,下注释掉的代码为导出Excel代码,因远程机器上未安装excel,所以后改为csv. dataGridView能直接粘贴数据到excel,同样也可以由excel粘贴到dataGridVie ...

  2. DataGridView编辑后立即更新到数据库的两种方法

    DataGridView控件是微软预先写好的一个显示数据的控件,功能非常强大,可以显示来自数据库表的数据和XML等其他来源的数据.最近在做一个迷你超市管理系统,要大量用到这个控件.所以花时间好好研究了 ...

  3. python程序化 k线指定时间更新_Python获取股票历史、实时数据与更新到数据库

    要做量化投资,数据是基础,正所谓"巧妇难为无米之炊" 在免费数据方面,各大网站的财经板块其实已提供相应的api,如新浪.雅虎.搜狐...可以通过urlopen相应格式的网址获取数据 ...

  4. python处理行情数据_Python获取股票历史、实时数据与更新到数据库

    要做量化投资,数据是基础,正所谓"巧妇难为无米之炊" 在免费数据方面,各大网站的财经板块其实已提供相应的api,如新浪.雅虎.搜狐...可以通过urlopen相应格式的网址获取数据 ...

  5. mysql 更新表格数据_mysql更新表格数据库数据

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  6. java删除选中行数据库数据_删除DataGridView选中行并更新数据库

    前面写过一篇文章是DataGridView控件显示数据的,DataGridView在与数据库打交道时会经常出现,也很实用.通过DataGridView对数据库进行更改和查询都比较方便. 这里我们需要用 ...

  7. C# 数据库dataGridView刷新数据和主外键判断

    本文主要讲诉在使用VS2012+SQL Server数据库做系统中,通常会遇到几个问题.使用dataGridView控件在修改.删除.插入数据后,怎样刷新数据显示操作后的结果.同时在对数据操作时通常会 ...

  8. 【DBMS 数据库管理系统】数据仓库特征 ( 特征一 : 面向主题组织数据 | 特征二 : 数据集成 | 特征三 : 数据不可更新 | 特征四 : 随时间不断变化 )

    文章目录 一.特征一 : 面向主题 数据组织方式 二.特征二 : 数据集成 三.特征三 : 数据不可更新 四.特征四 : 数据仓库中的数据 随时间不断变化 一.特征一 : 面向主题 数据组织方式 主题 ...

  9. thinkphp长连接MySQL_ThinkPHP3.2.3---mysql+ajax实现长连接,实时监测数据库数据是否更新...

    实现目标 对数据库的数据更新进行监测,如果更新了数据就将数据全部显示出来,没有更新,则一直监测. 比如有一个服务端(浏览器),有很多客户端(浏览器),客户端提交了数据,服务端想要在不刷新浏览器的情况下 ...

最新文章

  1. python 语言教程(4)元组
  2. 简单解释什么是 依赖注入 和 控制反转
  3. JWT认证不通过导致不能访问视图的解决方案
  4. 我们真正需要的目标(原名:制定目标你会吗?)
  5. 解决sklearn.metrics指标报错ValueError: Target is multiclass but average=‘binary‘. Please choose anothe...
  6. 循环首次适应算法_遗传算法 | 了解底层, 摆脱工具箱
  7. 精通Hibernate类与类关联关系:[三]映射一对多双向自身关联关系
  8. Factory Method (工厂方法)
  9. WINDOWS系统最近使用的项目路径
  10. 一个Windows C++的线程池类实现
  11. php期末考卷,php试卷B高质量含答案
  12. 2019数据安装勾选_【在发票平台确认签名后,为什么在电子税务局增值税申报表上没有自动显示进项数据?】一张发票的“有效税额”是否可以分两个月抵扣?...
  13. html自定义字体,css怎么自定义字体?
  14. 【转载】COMSOL Multiphysics 5.3a 安装教程
  15. 根据后台给的时区与时间戳转换时区与时间
  16. 全球500强员工是这么考试的!还有答案~
  17. 视频教程-JAVAEE真实课堂系列之JSP+EL+JSTL-云计算基础架构
  18. 嵌入式开发:McObject eXtremeDB嵌入式数据库系统
  19. 单光感pid巡线_乐高4种单光感巡线逻辑
  20. java使用tess4j 小白教程

热门文章

  1. 【安全牛学习笔记】w3af
  2. Firefox 48 beta和E10S发布
  3. 【深一点学习】BP网络,结合数学推导的代码实现
  4. 你偷看的小黄片,全被监视了!网友:隐私早已。。。
  5. 华为腾讯汉能:叫响世界的三大中国自主创新企业
  6. 【sdx62】QCMAP_CLI手动拨号操作说明
  7. css溢出部分用省略号代替
  8. 数据结构初学之循环队列补充
  9. pyinstaller打包多个python文件
  10. 安卓 SDK 开发使用 VirtualAPK 实现插件化