個人網站:友書小說網(http://laiyoushu.com)綠色純淨無廣告,歡迎大家前來看小說
前提:改程序的主要作用是用來每天定時自動解析客戶上傳的csv文件並將其數據入庫,執行成功之後會自動發郵件給指定的人反饋執行情況,併爲了防止某些情況下服務器被重啓,所以,也相應的加上了開機自啓功能。所有代碼均爲原創,歡迎大家一起討論IT技術以及指點出本人的不足,因爲這些都是很基礎的代碼,所以就懶得寫註釋了
PS:代碼自己反覆側過,可直接拿去用,
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.Common;
using System.Text.RegularExpressions;
using System.Data.SqlClient;
using Microsoft.Win32;
using System.Net.Mail;
using System.Net;
namespace ReadExcel
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public static StreamReader sr;
public static StreamWriter sw;
private void Form1_Load(object sender, EventArgs e)
{
}
protected HSSFWorkbook hssfworkbook;
//設置加入開機啓動
private void but_start_Click(object sender, EventArgs e)
{
//startread();
string path = Application.ExecutablePath;
RegistryKey rk = Registry.LocalMachine;
RegistryKey rk2 = rk.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run");
rk2.SetValue("JcShutdown", path);
rk2.Close();
rk.Close();
}
//開始
public static void startread()
{
sw = new StreamWriter("C:\\堪寶CSV更新日誌文件.txt", false);
sw.WriteLine("準備解析CSV文件!" + " " + DateTime.Now.ToString() + "\n");
sw.Flush();
//string path_Url = @"c:/test.csv";
string path_Url = @"C:/FTPLoad/CAMBRO.CSV";
List<MV_Excel> list = new List<MV_Excel>();
try
{
StreamReader sr = new StreamReader(path_Url, Encoding.Default);
String line;
var aa = "";
sw.WriteLine("開始解析CSV文件!" + " " + DateTime.Now.ToString() + "\n");
sw.Flush();
while ((line = sr.ReadLine()) != null)
{
MV_Excel db = new MV_Excel();
aa = line.ToString();
string[] sArray = Regex.Split(aa, ",", RegexOptions.IgnoreCase);
db.Warehouse = sArray[0];
db.Item = sArray[1];
db.Qty = sArray[2];
list.Add(db);
}
sw.WriteLine("解析CSV完成!" + " " + DateTime.Now.ToString() + "\n");
sw.Flush();
//預備插入庫
try
{
string sql = "DELETE xxx;\n";
for (int i = 0; i < list.Count; i++)
{
if (i > 0)
{
sql += string.Format("INSERT INTO dbo.Order_Depot(aaa, bbb, ccc)VALUES ( '{0}','{1}','{2}');\n", list[i].Warehouse, list[i].Item, list[i].Qty);
}
}
using (SqlConnection con = new SqlConnection(@"server =.\sql2014;uid=sa;pwd=xxx;database=xxx"))
{
con.Open();
SqlCommand cmd = new SqlCommand(sql, con);
int status = cmd.ExecuteNonQuery();
if (status > 0)
{
int SuccessCount = SearchSuccessNo();
if (SuccessCount > 0)
{
sw.WriteLine("數據插入完成!" + " " + DateTime.Now.ToString() + "\n");
sw.Flush();
SendMailUseZj("數據執行詳情\n", SuccessCount + "條數據插入成功!\n入庫sql語句詳情爲:\n" + sql);
MessageBox.Show("插入成功!");
}
else
{
sw.WriteLine("數據插入失敗!受影響行數爲:" + SuccessCount + DateTime.Now.ToString() + "\n");
sw.Flush();
SendMailUseZj("數據執行詳情", "數據插入失敗!!受影響行數爲:" + SuccessCount + "\n" + "入庫sql語句詳情爲:\n" + sql);
MessageBox.Show("插入成功!");
}
}
else
{
sw.WriteLine("數據插入失敗!\n入庫sql語句詳情爲:\n" + sql + DateTime.Now.ToString() + "\n");
sw.Flush();
SendMailUseZj("數據執行詳情", "數據插入失敗!!\n入庫sql語句詳情爲:\n" + sql);
MessageBox.Show("插入失敗!");
}
}
}
catch (Exception ex)
{
SendMailUseZj("數據執行詳情", "數據插入失敗!請檢查數據庫聯機字符串是否正確!\n" + ex.ToString().Substring(0, 300));
}
}
catch (Exception ex)
{
sw.WriteLine("解析CSV失敗!請檢查路徑是否正確、csv文件是否包含非法字符!" + DateTime.Now.ToString() + "\n" + ex.ToString().Substring(0, 300));
sw.Flush();
SendMailUseZj("數據執行詳情", "數據解析失敗!請檢查路徑是否正確、csv文件是否包含非法字符!\n" + ex.ToString().Substring(0, 300));
}
}
//查詢受影響的行數
public static int SearchSuccessNo()
{
object number = 0;
using (SqlConnection con = new SqlConnection(@"server =.\sql2014;uid=sa;pwd=xxx;database=xxx"))
{
con.Open();
SqlCommand cmd = new SqlCommand(" SELECT COUNT(1) FROM dbo.xxx", con);
number = cmd.ExecuteScalar();
}
return Convert.ToInt32(number);
}
//定時器,每秒執行一次
private void timer1_Tick(object sender, EventArgs e)
{
this.times.Interval = 1000;
times.Tick += new EventHandler(TimerEventProcessor);
}
//定時,每天兩點啓動private static void TimerEventProcessor(Object myObject, EventArgs myEventArgs)
{
if (DateTime.Now.ToString("HH:mm:ss") == "02:00:00")
{
startread();
}
}
private class MV_Excel
{
//Warehouse,Item,Qty
public string Warehouse { get; set; }
public string Item { get; set; }
public string Qty { get; set; }
}
public static void SendMailUseZj(string email_Title, string email_Content)
{
try
{
//發信人所用郵箱的服務器
string smtp = "smtp.163.com";
//發件人的郵箱
string mailForm = "[email protected]";
//發件人的密碼
string mailPwd = "chesdfsdfing";
SmtpClient client = new SmtpClient(smtp);
client.Port = 25;
client.UseDefaultCredentials = false;
client.Credentials = new NetworkCredential(mailForm, mailPwd);
/*指定如何處理待發的郵件*/
client.DeliveryMethod = SmtpDeliveryMethod.Network;
//MailMessage message = new MailMessage(mailForm, mailTo, mailTitle, mailContent);
MailMessage message = new MailMessage();
message.From = new MailAddress(mailForm, "xxx服務器", Encoding.UTF8);
//添加收件人
message.To.Add("[email protected]");
//添加抄送人
//message.CC.Add("[email protected]");
//郵件標題
message.Subject = email_Title;
//郵件內容
message.Body = email_Content;
//設置字符文本編碼格式
message.BodyEncoding = Encoding.UTF8;
message.HeadersEncoding = Encoding.UTF8;
message.SubjectEncoding = Encoding.UTF8;
message.IsBodyHtml = true;
//發送郵件
client.Send(message);
sw.WriteLine("郵件發送成功!" + DateTime.Now.ToString());
sw.Flush();
sw.Close();
}
catch (Exception ex)
{
sw.WriteLine("郵件發送失敗!" + DateTime.Now.ToString());
sw.Flush();
sw.Close();
MessageBox.Show("郵件發送失敗!");
}
}
}
}
如有問題,請加我QQ:631931078或352167311