2017-03-03 74 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

相关问题