Некоторые файлы excel не перемещаются с общего пути на SQL server
У нас есть приложение, в котором данные в файле Excel (присутствующие в общем пути) перемещаются в базу данных. В случае возникновения какой-либо ошибки файлы перемещаются в папку error, записывая ошибку в файл журнала.Для этой операции он использует службу windows.
Иногда файл не имеет никакой ошибки, все равно перемещается в папку ошибок, записывая журнал внешней таблицы не в ожидаемом формате. Но один и тот же файл загружается снова один или несколько раз, его перемещение в базу данных происходит без каких-либо ошибок.
Служба windows, БД и общий путь присутствуют в XP Server. Все эти годы приложение работало нормально. Но в последние дни вышеупомянутая проблема возникает почти для каждого файла.
Мы также установили компоненты Microsoft 2003, 2007,2012 office и механизмы доступа. Но проблема все равно остается.
Я упоминаю служебный код Windows ниже. Пожалуйста, помогите. Заранее спасибо.
using System.IO; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Linq; using System.ServiceProcess; using System.Text; using System.Data.SqlClient; using System.Data.OleDb; using System.Data.Common; namespace Impexp_Service { public partial class Service1 : ServiceBase { System.Timers.Timer T1 = new System.Timers.Timer(); public Service1() { InitializeComponent(); } protected override void OnStart(string[] args) { ///start /// { SqlConnection strconnection = new SqlConnection(); strconnection.ConnectionString = @"Data Source=XXXXXX;Initial Catalog=XXXX;User ID=XX;Password=XXXXXX;"; strconnection.Open(); // To get the all files placed at the shared path DirectoryInfo directory = new DirectoryInfo(@"D:\Impexp\Data\"); FileInfo[] files = directory.GetFiles("*.xlsx"); foreach (var f in files) { string path = f.FullName; // TO establish connection to the excel sheet string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=1\";"; //Create Connection to Excel work book OleDbConnection excelConnection = new OleDbConnection(excelConnectionString); excelConnection.Open(); //Create OleDbCommand to fetch data from Excel OleDbCommand cmd = new OleDbCommand("Select * from [Report$]", excelConnection); DbDataReader dr = cmd.ExecuteReader(); // OleDbDataReader dReader; // dReader = cmd.ExecuteReader(); SqlBulkCopy sqlBulk = new SqlBulkCopy(strconnection); //Give your Destination table name sqlBulk.DestinationTableName = "imp_master_test"; sqlBulk.WriteToServer(dr); excelConnection.Close(); File.Delete(path); // To move error files to the error folder /// end T1.Interval = 20000; T1.Enabled = true; T1.Start(); T1.Elapsed += new System.Timers.ElapsedEventHandler(T1_Elapsed); } } } void T1_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { T1.Enabled = false; try { SqlConnection strconnection = new SqlConnection(); strconnection.ConnectionString = @"Data Source=10.91.XXXXXX;Initial Catalog=XXXXX;User ID=XXXXX;Password=XXXXX;"; strconnection.Open(); // To get the all files placed at the shared path DirectoryInfo directory = new DirectoryInfo(@"D:\Impexp\Data\"); FileInfo[] files = directory.GetFiles("*.xlsx"); foreach (var f in files) { string path = f.FullName; // TO establish connection to the excel sheet string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=1\";"; //Create Connection to Excel work book OleDbConnection excelConnection = new OleDbConnection(excelConnectionString); try { excelConnection.Open(); //Create OleDbCommand to fetch data from Excel OleDbCommand cmd = new OleDbCommand("Select * from [Report$]", excelConnection); DbDataReader dr = cmd.ExecuteReader(); // OleDbDataReader dReader; // dReader = cmd.ExecuteReader(); SqlBulkCopy sqlBulk = new SqlBulkCopy(strconnection); //Give your Destination table name sqlBulk.DestinationTableName = "imp_master_prod"; sqlBulk.WriteToServer(dr); excelConnection.Close(); File.Delete(path); } // To move error files to the error folder catch (Exception exp) { excelConnection.Close(); File.Move(path, Path.Combine(@"D:\Impexp\error\", f.Name)); string path1 = @"D:\Impexp\error\error.txt"; if (File.Exists(path1)) { // Create a file to write to. using (StreamWriter sw = File.AppendText(path1)) { sw.WriteLine("File : " + path + " : " + exp.Message); sw.Flush(); } } T1.Enabled = true; T1.Start(); } } strconnection.Close(); // End of TRY 1 } catch (UnauthorizedAccessException UAEx) { string path1 = @"D:\Impexp\error\error.txt"; if (File.Exists(path1)) { // Create a file to write to. using (StreamWriter sw = File.AppendText(path1)) { sw.WriteLine(UAEx.Message); sw.Flush(); } } T1.Enabled = true; T1.Start(); } catch (PathTooLongException PathEx) { string path1 = @"D:\Impexp\error\error.txt"; if (File.Exists(path1)) { // Create a file to write to. using (StreamWriter sw = File.AppendText(path1)) { sw.WriteLine(PathEx.Message); sw.Flush(); } } T1.Enabled = true; T1.Start(); } T1.Enabled = true; T1.Start(); } protected override void OnStop() { } } }
Что я уже пробовал:
Мы также установили компоненты Microsoft 2003, 2007,2012 office и механизмы доступа. Но проблема все равно остается.