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();
}
}
}
pensez-vous que vous pouvez poster des paramètres web.config? Je voudrais voir le httpRuntime dans configuration> –
BigBlondeViking