using System; using System.Collections.Generic; using System.Configuration; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.OracleClient; using System.Configuration; using System.Threading; using System.Diagnostics; namespace ImportDate { public class Program { public static string connString = string.Empty; public static bool Success = false; public static string LogAddress = string.Empty; public static string _HostIP = ConfigurationManager.AppSettings["HostIP"].ToString(); public static string _ServerName = ConfigurationManager.AppSettings["ServerName"].ToString(); public static string _UserName = ConfigurationManager.AppSettings["UserName"].ToString(); public static string _Password = ConfigurationManager.AppSettings["Password"].ToString(); public static void InsertDate(string FilePath) { string fileName = System.IO.Path.GetFileNameWithoutExtension(FilePath); connString = GetConnString(_HostIP, _ServerName, _UserName, _Password); int count = 0; int restult = 0; using (StreamReader sr = new StreamReader(FilePath, Encoding.UTF8)) { OracleTransaction myTrans; using (OracleConnection conn = new OracleConnection(connString)) { conn.Open(); myTrans = conn.BeginTransaction(); using (OracleCommand cmd = conn.CreateCommand()) { cmd.Transaction = myTrans; int i = 0; string line = null; try { while ((line = sr.ReadLine()) != null) { i++; if (i == 0) { break; } else if (i > 1) { if (string.IsNullOrWhiteSpace(line)) { continue; } else { string[] strs = line.Split(new string[] { "," }, StringSplitOptions.None); string Merchant_code = strs[0]; string Ticket_code = strs[1]; string Ffticket_code = strs[2]; string Centerticket_code = strs[3]; string Oriticket_code = strs[4]; string Transaction_trench = strs[5]; string Transaction_type = strs[6]; float Ticket_amount = float.Parse(strs[7]); string Currency = strs[8]; float Deduction_rate = float.Parse(strs[9]); float Taxfee_amount = float.Parse(strs[10]); DateTime Trade_date = Convert.ToDateTime(strs[11]); string Mpseparate_desc = strs[12]; string sql = "SELECT Count(1) FROM HIGHWAY_EXCHANGE.T_MPSEPARATE WHERE FFTICKET_CODE='" + Ffticket_code + "'"; OracleCommand oraclecmd = new OracleCommand(sql, conn, myTrans); decimal number = (decimal)oraclecmd.ExecuteScalar(); if (number >0) { //LogManager.MessageLog("文件名" + fileName + "中,付付订单号为:" + Ffticket_code + "的数据重复,该条解析失败"); //Success = false; continue; } cmd.CommandText = "insert into HIGHWAY_EXCHANGE.T_MPSEPARATE(MERCHANT_CODE,TICKET_CODE,FFTICKET_CODE,CENTERTICKET_CODE,ORITICKET_CODE,TRANSACTION_TRENCH,TRANSACTION_TYPE,TICKET_AMOUNT,CURRENCY,DEDUCTION_RATE,TAXFEE_AMOUNT,TRADE_DATE,MPSEPARATE_DESC) values(:Merchant_code,:Ticket_code,:Ffticket_code,:Centerticket_code,:Oriticket_code,:Transaction_trench,:Transaction_type,:Ticket_amount,:Currency,:Deduction_rate,:Taxfee_amount,:Trade_date,:Mpseparate_desc)"; cmd.Parameters.Clear();//清除上一次的参数 cmd.Parameters.Add(new OracleParameter(":MERCHANT_CODE", Merchant_code)); cmd.Parameters.Add(new OracleParameter(":TICKET_CODE", Ticket_code)); cmd.Parameters.Add(new OracleParameter(":FFTICKET_CODE", Ffticket_code)); cmd.Parameters.Add(new OracleParameter(":CENTERTICKET_CODE", Centerticket_code)); cmd.Parameters.Add(new OracleParameter(":ORITICKET_CODE", Oriticket_code)); cmd.Parameters.Add(new OracleParameter(":TRANSACTION_TRENCH", Transaction_trench)); cmd.Parameters.Add(new OracleParameter(":TRANSACTION_TYPE", Transaction_type)); cmd.Parameters.Add(new OracleParameter(":TICKET_AMOUNT", Ticket_amount)); cmd.Parameters.Add(new OracleParameter(":CURRENCY", Currency)); cmd.Parameters.Add(new OracleParameter(":DEDUCTION_RATE", Deduction_rate)); cmd.Parameters.Add(new OracleParameter(":TAXFEE_AMOUNT", Taxfee_amount)); cmd.Parameters.Add(new OracleParameter(":TRADE_DATE", Trade_date)); cmd.Parameters.Add(new OracleParameter(":MPSEPARATE_DESC", Mpseparate_desc)); restult = (int)cmd.ExecuteNonQuery(); if (restult > 0) { count++; Success = true; } else { Success = false; } } } } myTrans.Commit(); //循环外提交事务 } catch (Exception ex) { myTrans.Rollback(); //回滚事务 Success = false; LogManager.MessageLog("文件名为:" + fileName + "的数据解析失败"); LogManager.ErrorLog(ex, ""); } finally { conn.Close(); } } } } } public static void MainMethod() { try { int SuccessCount = 0; int FalseCount = 0; DateTime startTime = DateTime.Now; //定义一个开始时间 string path = System.IO.Directory.GetCurrentDirectory(); //获取exe所在根目录和所在目录下的txt文件 string desDir = path + "\\" + "bak"; if (!IsHaveTxt(path)) { LogManager.MessageLog("执行程序所在目录下不存在DLS3863_开头的txt文件"); return; } if (!Directory.Exists(desDir)) { Directory.CreateDirectory(desDir); } DirectoryInfo folder = new DirectoryInfo(path); //获取包含DLS3863_开头的所有txt文件*DLS3863_* foreach (FileInfo file in folder.GetFiles("*DLS3863_*.txt", SearchOption.TopDirectoryOnly)) { InsertDate(file.FullName); string desDirPath = desDir + "\\" + file.Name; if (Success == true) { if (File.Exists(desDirPath)) { desDirPath = desDir + "\\" + System.IO.Path.GetFileNameWithoutExtension(file.FullName) + " - 副本.txt"; } //if (file.Name.Equals(System.IO.Path.GetFileName(desDirPath))) MoveDirFile(file.FullName, desDirPath); SuccessCount++; } else if (Success == false) { FalseCount++; if (File.Exists(desDirPath)) { desDirPath = desDir + "\\" + System.IO.Path.GetFileNameWithoutExtension(file.FullName) + " - 副本.txt"; } MoveDirFile(file.FullName, desDirPath); } } TimeSpan ts = DateTime.Now - startTime; if (SuccessCount > 0) { LogManager.MessageLog("成功解析" + SuccessCount + "个txt文件,"+ FalseCount + "个txt文件失败," + "共花费时间:" + ts.ToString()); } } catch (Exception ex) { LogManager.ErrorLog(ex, ""); } } /// /// 该目录下是否存在txt文件 /// /// /// public static bool IsHaveTxt(string Path) { DirectoryInfo foldinfo = new DirectoryInfo(Path); foreach (FileInfo info in foldinfo.GetFiles("*.txt")) { return true; } return false; } public static string GetConnString(string _HostIP, string _ServerName, string _UserName, string _Password) { string connString = string.Format(@"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST={0})(PORT=1521))(CONNECT_DATA=(SERVICE_NAME={1})));User Id={2};Password={3};", _HostIP, _ServerName, _UserName, _Password); return connString; } /// /// 移动目录内的文件到另一目录 /// /// 源目录 /// 目标目录 public static void MoveDirFile(string sorDir, string desDir) { try { if (Directory.Exists(sorDir)) { return; } File.Move(sorDir, desDir); if (File.Exists(sorDir)) { File.Delete(sorDir); } } catch(Exception ex) { LogManager.ErrorLog(ex, ""); } } static void Main(string[] args) { Console.WriteLine("正在执行,请稍后..."); MainMethod(); Console.WriteLine("执行完成..."); //Console.ReadKey(); return; } } }