2010-12-10 33 views
3

J'ajoute aussi un groupe C#, car ce n'est pas un problème VB mais ExecuteNonQuery donne un timeout. comment augmenter le temps mort?ODBC - ExecuteNonQuery donne timeout -> où l'augmenter?

errormessage exact: erreur [HYT00] [Microsoft] [ODBC SQL Server Driver] Délai d'attente expiré

nous avons système CMS et que la CMS j'ai créé un IFRAME qui appelle ce code ASPX + VB, qui est dans le dossier physicall différent et il a géré Pipeline Classic. Lorsque je l'exécute dans l'ancienne application, cela fonctionne très bien. Mais j'ai copié les pages sur le serveur de news et créé un nouveau pool d'applications/site Web. Appelez OldASPPAGES. J'obtiens le délai d'attente ODBC sur la fonction 'ExecuteNonQuery()' ci-dessous.

Parfois, je fonctionne, mais 9 des 10 cas je gettimeout. J'ai vérifié les enregistrements et il y a 247 enregistrements. Mais ci-dessous, vous voyez qu'il y a 2 instructions sql composées pour chaque boucle. (mise à jour et insertion) ... 2 x 247 enregistrements = env. 500 enregistrements.

Mais depuis la déclaration sql est concantenated si 1 appel de ExecuteNonQuery, executue fait faire 500 instructions SQL ....

Je sais que cela ORDURES, inacceptable .... Mais je hérité donc pour le moment je ne peut pas réécrire cela.

Au point:

Voici les statemenst d'origine: Je viens d'ajouter: conn.ConnectionTimeout = 240 Comme vous pouvez le voir, j'ai ajouté 240 secondes, mais je reçois toujours les délais d'attente après env. 30 secs ... donc ce n'est pas le bon endroit ....

question: - Pourquoi cette instruction fonctionne dans l'ancien environnement ASP (sans problème) et pas dans cet environnement dans un IFRAME ....

  • Je règle le délai d'attente = 240 mais j'obtiens toujours le délai après 30 secondes. Où définissez-vous le délai d'expiration plus?

Quelqu'un peut-il nous conseiller?

grâce

Private Function data30bis_save(ByVal data_30bis_list, ByVal user_id) 
     lblMessage.Text = "data30bis_save" 
     Dim conn As OdbcConnection, cmd As OdbcCommand, ra As Integer, sql As String, data_30bis As Attest30bis.Data30bisCobonet 
     ' important: always purge the old situation before loading the new one ! 
     data30bis_cleanup(user_id) 
     conn = New OdbcConnection("dsn=chris2;uid=xxx;pwd=ssddddd;") 
     conn.ConnectionTimeout = 240 
     conn.Open() 
     sql = "" 
     lblMessage.Text = "st" 
     For Each data_30bis In data_30bis_list 
      sql = sql & "update usr_codes set " 
      If Len(data_30bis.analyseDate) > 0 Then 
       sql = sql & "a30b_analysedate=convert(datetime,'" & data_30bis.analyseDate.ToString & "',103)" 
      Else 
       sql = sql & "a30b_analysedate=getdate()" 
      End If 
      sql = sql & ", a30b_errorcode=" & data_30bis.errorCode 
      sql = sql & ", a30b_inputcompanyidvalid=" & Abs(CInt(data_30bis.inputCompanyIdValid)) 
      sql = sql & ", a30b_inputnossvalid=" & Abs(CInt(data_30bis.inputNossValid)) 
      sql = sql & ", a30b_noss=" & data_30bis.noss 
      sql = sql & ", a30b_reservecontractorconcept=" & Abs(CInt(data_30bis.reserveContractorConcept)) 
      If Len(data_30bis.reserveContractorDate) > 0 Then 
       sql = sql & ", a30b_reservecontractordate=convert(datetime,'" & data_30bis.reserveContractorDate.ToString & "',103)" 
      Else 
       sql = sql & ", a30b_reservecontractordate=getdate()" 
      End If 
      sql = sql & ", a30b_reservemakingconcept=" & Abs(CInt(data_30bis.reserveMakingConcept)) 
      If Len(data_30bis.reserveMakingDate) > 0 Then 
       sql = sql & ", a30b_reservemakingdate=convert(datetime,'" & data_30bis.reserveMakingDate.ToString & "',103)" 
      Else 
       sql = sql & ", a30b_reservemakingdate=getdate()" 
      End If 
      sql = sql & ", a30b_date_modified=getdate()" 
      sql = sql & " where user_id='" & user_id & "' and no_tva='" & data_30bis.companyId & "' and cd_pays_tva = 'BE'" 
      sql = sql & vbCrLf 
      ' 2nd SQL 
      sql = sql & "insert a30b_controles (dt_ctrl, user_id, cd_pays_tva, no_tva, no_societe, a30b_analysedate, a30b_errorcode, a30b_inputcompanyidvalid, a30b_inputnossvalid, " 
      sql = sql & "a30b_noss, a30b_reservecontractorconcept, a30b_reservecontractordate, a30b_reservemakingconcept, a30b_reservemakingdate, a30b_companyId) " 
      sql = sql & "values (getdate(),'" & user_id & "','FR','massif',''," & "convert(datetime,'" & data_30bis.analyseDate.ToString & "',103)" 
      sql = sql & "," & data_30bis.errorCode & "," & Abs(CInt(data_30bis.inputCompanyIdValid)) & "," & Abs(CInt(data_30bis.inputNossValid)) & "," & data_30bis.noss & "," & Abs(CInt(data_30bis.reserveContractorConcept)) 
      sql = sql & ",convert(datetime,'" & data_30bis.reserveContractorDate.ToString & "',103)," & Abs(CInt(data_30bis.reserveMakingConcept)) 
      sql = sql & ",convert(datetime,'" & data_30bis.reserveMakingDate.ToString & "',103)," & data_30bis.companyId & ")" 
      sql = sql & vbCrLf 
     Next 
     lblMessage.Text = sql 
     cmd = New OdbcCommand(sql, conn) 
     ra = cmd.ExecuteNonQuery() 
     lblMessage.Text = "ssssst" 
     conn.Close() 
     cmd = Nothing 
     conn = Nothing 
     lblMessage.Text = "ssssat" 
     Return ra 
    End Function 

Répondre

0

Avez-vous essayé la propriété CommandTimeout encore sur la classe de commande?

Cependant, ce n'est que la correction des symptômes. Ne pouvez-vous pas modifier votre requête pour la rendre plus performante?

+0

Salut Frederik, c'est génial ... Je mettais le Timeout sur l'objet connexion. il semble que je doive le mettre sur l'objet de commande ... Maintenant ça marche super! merci .... btw: En effet ce truc doit être réécrit. Merci encore – ethem

1
lblMessage.Text = sql  
cmd = New OdbcCommand(sql, conn) 

cmd.CommandTimeout= 200 

ra = cmd.ExecuteNonQuery()  
lblMessage.Text = "ssssst"