2016-06-30 30 views
9

Abbiamo un'applicazione in cui i dati nel file Excel (presenti nel percorso condiviso) si spostano nel database. In caso di errore, i file si spostano nella cartella errori scrivendo l'errore in un file di registro. Utilizza un servizio Windows per l'operazione.Alcuni file Excel non si spostano da percorso condiviso a SQL Server

A volte il file non ha alcun errore si sposta ancora nella cartella errori scrivendo il registro External table is not in the expected format. Ma lo stesso file si carica nuovamente per una volta o più volte, passando al Database senza errori.

Il servizio Windows, il DB e il percorso condiviso sono presenti in XP Server. L'applicazione funzionava bene per tutti questi anni. Ma negli ultimi giorni, il problema sopra menzionato si sta verificando per quasi tutti i file.

Abbiamo installato i componenti di Microsoft 2003, 2007,2012 per l'ufficio e anche i motori di accesso. Ma ancora il problema persiste ancora.

Sto menzionando il codice di servizio di Windows qui sotto. Aiuto di Pls. Grazie in anticipo.

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() 
     { 
     } 
    } 
} 
+2

Supponendo che non riesca per "molti file", c'è qualcosa di "diverso" in quelli che DO passano? (ad esempio numero di fogli, numero di record nel foglio [Rapporti], ...). Nel peggiore dei casi, dare un'occhiata più da vicino a un file fallito e a un file OK: decomprimli e confrontare tutti i file (rilevanti). PS: Nella mia esperienza (limitata), il caricamento dei dati da Excel può fallire a causa di alcune impostazioni delle impostazioni locali (sul server AND/OR sulle macchine client). PS: Non penso che abbia importanza dal momento che ha funzionato in passato; ma non dovrebbe il connectiontring dire 'Excel 12.0 Xml'? https://www.connectionstrings.com/ace-oledb-12-0/ – deroby

+0

@deroby Grazie per il tuo commento, signore. Puoi chiarire le impostazioni regionali che causano questo problema? – METALHEAD

+1

Anche la mia stringa di connessione afferma :: 'stringa excelConnectionString = @" Provider = Microsoft.ACE.OLEDB.12.0; Origine dati = "+ percorso +"; Proprietà estese = \ "Excel 12.0; HDR = Sì; IMEX = 1 \" ; ";' C'è un \ prima e dopo 'Excel 12.0; HDR = Sì; IMEX = 1'. Questo sta causando il problema .. ?? – METALHEAD

risposta

0

Guardando this question, questo sembra essere un problema con la lettura del file excel, non la tabella di SQL. Prova a cambiare la stringa di connessione di Excel.

string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=1\";"; 

a

string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;HDR=Yes;IMEX=1\"; 

Inoltre, guardando another answer, la causa principale potrebbe essere caricato nuove versioni di Excel.

Problemi correlati