2017-03-03 54 views
2

你好我有這個C#代碼錯誤,我有一個例外的代碼:MessageBox.Show(「Salto sulla query 3」+ ex),但我不明白爲什麼,我加載下面生成的異常圖像,你能幫助我謝謝。錯誤導入數據庫mdb到Sql Server中

MessageBox.Show("Aggiorno Articoli "); 
       //APRO LA CONNESSIONE AL FILE 
       dbConn = new OleDbConnection(@"Provider = Microsoft.Jet.OLEDB.4.0; Data Source=" + dialog.FileName + "; Persist Security Info = False; Jet OLEDB:Database Password = " + textBoxPwdComet.Text + "; Mode = Share Deny None"); 
       //APRO LA CONNESSIONE 
       SqlConnection conn = db.apriconnessione(); 
       //CREO LA TABELLA TEMPORANEA 
       String QueryTemp = "CREATE TABLE TabellaTemp(CODMARCA varchar(MAX),CODART varchar(MAX),DESCR varchar(MAX),UM varchar(MAX),PRZNETTO money,PRZCASA money,DATAAGG datetime,);"; 
       SqlCommand cmdTemp = new SqlCommand(QueryTemp, conn); 
       cmdTemp.ExecuteNonQuery(); 
       //COPIA DEI DATI NELLA TABELLA TEMPORANEA 
       string query = "SELECT CODMARCA,CODART,DESCR,UM,PRZNETTO,PRZCASA,DATAAGG FROM ARTICOLI"; 
       OleDbDataAdapter da = new OleDbDataAdapter(query, dbConn); 
       DataTable dt = new DataTable(); 
       da.Fill(dt); 
       SqlBulkCopy bulk = new SqlBulkCopy(conn); 
       bulk.DestinationTableName = "TabellaTemp"; 
       bulk.WriteToServer(dt); 
      //Setto tutti gli articoli come non disponbili(QUELLI COMET) 
      try 
      { 
       String Query2 = "Update Articolo set Stato = 'Nondisponibile' where Importato = 'COMET' "; 
       cmdTemp = new SqlCommand(Query2, conn); 
       cmdTemp.ExecuteNonQuery(); 
      } 

      catch(Exception ex) 
      { 
       MessageBox.Show("Salto su query 2"); 
      } 
      //Aggiorno gli articoli, quelli che non vengono aggiornati non sono più disponbili 

      try { 
       String Query3 = "Update Articolo set Articolo.Stato = 'Disponibile',Articolo.Prezzo = TabellaTemp.PRZNETTO,Articolo.PrezzoListino = TabellaTemp.PRZCASA,Articolo.DataAggiornamento = TabellaTemp.DATAAGG,Articolo.Descrizione = TabellaTemp.DESCR,Articolo.UM = TabellaTemp.UM from Articolo inner join TabellaTemp on TabellaTemp.CodMarca = Articolo.CodMarca and TabellaTemp.CODART = Articolo.CodArt where Articolo.Importato = 'COMET' "; 
       cmdTemp = new SqlCommand(Query3, conn); 
       cmdTemp.ExecuteNonQuery(); 
      } 

      catch(Exception ex) 
      { 
       MessageBox.Show("Salto sulla query 3 "+ex); 
      } 

       //FINE COPIA DATI TABELLA TEMPORANEA 

       //ELIMINO LA TABELLA TEMPORANEA 
       QueryTemp = "DROP TABLE TabellaTemp"; 
       cmdTemp = new SqlCommand(QueryTemp, conn); 
       cmdTemp.ExecuteNonQuery(); 

       //FINE 
       conn.Close(); 

       MessageBox.Show("Aggiornamento Articoli terminato!! "); 


       CaricamentoDataGridNonDisponbili(); 

例外:

enter image description here

+0

您是否試過玩過bulkCopy.BulkCopyTimeout屬性? – HKImpact

+0

@HKImpact否我不知道它是什麼 – riki

+0

默認的超時時間設置爲30秒。如果您的查詢需要更多時間,那麼您需要使用BulkCopyTimeout屬性。嘗試將其設置爲60秒。 bulkCopy.BulkCopyTimeout = 60 – HKImpact

回答

0

您的查詢超時,即:默認30秒未完成。將CommandTimeout設置爲較高值不是一個好習慣。要真正解決這個問題,您需要爲涉及的所有表提供表架構(如果有索引)。基於此,您需要優化查詢以使用適當的索引更快運行。

1

首先試試你的命令對象設置爲Nothing。

cmdTemp = Nothing; 

如果這樣不能解決問題,請嘗試調查爲什麼您的查詢3的更新查詢超時。我首先將你的UPDATE語句轉換成一個SELECT語句。驗證您是否獲得了結果,並且您沒有用查詢對服務器徵稅。

SELECT a.Stato, a.Prezzo, a.PrezzoListino, a.DataAggiornamento, a.Descrizione, a.UM, 
    t.PRZNETTO, t.PRZCASA, t.DATAAGG, t.DESCR, t.UM 
FROM Articolo a 
INNER JOIN TabellaTemp t on t.CodMarca = a.CodMarca 
    and t.CODART = a.CodArt 
WHERE a.Importato = 'COMET' 

如果你的SELECT語句工作正常,那麼我打賭你的UPDATE需要更多的時間來運行。我相信你的命令的超時屬性是30秒。你可以默認爲0,只要你想運行,但我會小心這樣做。嘗試使用超時聲明。這應該爲你解決問題。

String Query3 = "Update Articolo set Articolo.Stato = 'Disponibile',Articolo.Prezzo = TabellaTemp.PRZNETTO,Articolo.PrezzoListino = TabellaTemp.PRZCASA,Articolo.DataAggiornamento = TabellaTemp.DATAAGG,Articolo.Descrizione = TabellaTemp.DESCR,Articolo.UM = TabellaTemp.UM from Articolo inner join TabellaTemp on TabellaTemp.CodMarca = Articolo.CodMarca and TabellaTemp.CODART = Articolo.CodArt where Articolo.Importato = 'COMET' "; 
cmdTemp = Nothing; 
cmdTemp = new SqlCommand(Query3, conn); 
// Setting command timeout to 2 minutes 
cmdTemp.CommandTimeout = 120; 
cmdTemp.ExecuteNonQuery(); 

我會誠實地努力讓您的UPDATE語句以更優化的速度運行,如果這能解決問題。

+0

我試過查詢選擇它的作品,然後我試圖添加到查詢3,cmdTemp.CommandTimeout = 120,但我沒有那麼我曾嘗試設置cmdTemp。 CommandTimeout = 0但仍然卡在數據庫上沒有生命跡象不會改變任何東西!但查詢並未完成其執行 – riki

+0

嘗試將cmdTemp設置爲空。我重新更新了我的答案以反映這一變化。 – HKImpact

+0

我試圖輸入什麼(空)但沒有任何變化,繼續被阻止 – riki

相關問題