2009-08-18 6 views
0

J'ai un site Web qui, de temps en temps, nécessite des mises à jour groupées sur la base de données Access. Pour faciliter cela, j'ai créé une page Exécuter une fois et supprimer qui contient une grande zone de texte. un captcha, et un mot de passe fort codé en dur. Quand je lance ceci contre une copie locale de la base de données je n'ai aucun problème, mais quand je l'exécute sur le serveur j'obtiens un "raccordement avec le rétablissement de serveur" environ 3 secondes après avoir cliqué soumettre. Malheureusement, l'environnement d'hébergement est hors de ma portée, donc je ne peux pas regarder les journaux côté serveur lorsque cela se produit. Je n'ai pas la moindre idée de ce qui pourrait causer cela, alors j'espérais que vous pourriez jeter un coup d'œil.ASP.NET - Réinitialisation de la connexion serveur

Ce code est un peu moche juste parce que je n'ai pas vraiment voulu y consacrer beaucoup de temps (et une partie a été écrite par un autre développeur). De toute façon, je ne vois pas de problèmes fonctionnels évidents.

protected void btnRunBatch_Click(object sender, EventArgs e) 
{ 
    if (Page.IsValid) 
    { 
     ArrayList queries = GetSqlStatementArray(); 
     string results = string.Empty; 

     try 
     { 
      BatchSQLInsert(Application["DBPath"].ToString(), queries); 

      if (queries.Count > 0) 
      { 
       results = "<b>Batch Operation Completed Successfully.</b><br /><br />"; 
       results += "The following queries were executed:"; 
       results += "<ul>"; 
       foreach (string query in queries) 
       { 
        results += "<li>" + query + "</li>"; 
       } 
       results += "</ul>"; 

       this.tbxBatchStatement.Text = string.Empty; 
      } 
      else 
      { 
       results = "<b>No queries to execute.</b>"; 
      } 
     } 
     catch (Exception ex) 
     { 
      results = "<b>Execution Errors Encountered:</b><br />"; 
      results += "<ul><li>" + ex.Message + "</li></ul>"; 
     } 

     this.phResults.Controls.Add(new LiteralControl(results)); 
    } 
} 

private ArrayList GetSqlStatementArray() 
{ 
    ArrayList queries = new ArrayList(); 
    string[] lines = this.tbxBatchStatement.Text.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); 
    string lineBuffer = string.Empty; 

    foreach (string line in lines) 
    { 
     if (lineBuffer == string.Empty) 
     { 
      if ((line.ToUpper().StartsWith("SELECT") || line.ToUpper().StartsWith("INSERT") || line.ToUpper().StartsWith("UPDATE") || line.ToUpper().StartsWith("DELETE"))) 
      { 
       if (line.EndsWith(";")) 
        queries.Add(line); 
       else 
        lineBuffer = line; 
      } 
     } 
     else 
     { 
      lineBuffer += " " + line; 
      if (line.EndsWith(";")) 
      { 
       queries.Add(lineBuffer); 
       lineBuffer = string.Empty; 
      } 
     } 
    } 
    return queries; 
} 

public static void BatchSQLInsert(string DBPath, System.Collections.ArrayList sqlArray) 
{ 
    System.Data.OleDb.OleDbCommand cmd = null; 
    System.Data.OleDb.OleDbConnection conn = null; 
    System.Data.OleDb.OleDbTransaction myTrans = null; 
    int intRecsReturned = 0; 
    int i = 0; 

    if (sqlArray.Count > 0) 
    { 
     cmd = new System.Data.OleDb.OleDbCommand(); 
     conn = GetConnection(DBPath); 
     myTrans = conn.BeginTransaction(); 

     try 
     { 
      cmd.CommandType = System.Data.CommandType.Text; 
      cmd.Connection = conn; 
      cmd.Transaction = myTrans; 
      while (i < sqlArray.Count) 
      { 
       cmd.CommandText = (string)(sqlArray[i]); 
       intRecsReturned = cmd.ExecuteNonQuery(); 
       i++; 
      } 
      myTrans.Commit(); 
      conn.Close(); 
     } 
     catch (Exception eee) 
     { 
      myTrans.Rollback(); 

      throw new Exception("BatchSQLInsert() failed-" + eee.Message + "\r\nArray-" + sqlArray.ToString()); 
     } 
     finally 
     { 
      if (conn != null) 
       conn.Dispose(); 
      if (cmd != null) 
       cmd.Dispose(); 
     } 
    } 
} 
+0

pensez-vous que vous pouvez poster des paramètres web.config? Je voudrais voir le httpRuntime dans BigBlondeViking

Répondre

1

sons comme le processus est trop long cours d'exécution, vous devrez peut-être ajuster les paramètres Time Out dans IIS ... :(

que je sais que tu ne peux pas, désolé de ne pas vraiment helpful-

+0

Je pensais que cela aussi, mais comme je l'ai dit dans le question originale ti mes dans environ 3 secondes. C'est évidemment beaucoup moins que le délai par défaut d'IIS. Quelque chose l'interrompt immédiatement. –

+0

PHP, par exemple, vous permet de définir des délais lors de l'exécution. Peut-être que IIS le permet aussi? –

Questions connexes