ASP.NET - сброс подключения к серверу
У меня есть веб-сайт, который время от времени требует от меня массовых обновлений базы данных Access, и для этого я создал страницу "запускай один раз и удаляй", которая содержит большое текстовое поле, капчу и надежно закодированный надежный пароль. Когда я запускаю это для локальной копии базы данных, у меня нет проблем, но когда я запускаю ее на сервере, через 3 секунды после нажатия кнопки "Отправить" появляется "Соединение с сбросом сервера". К сожалению, среда хостинга выходит за рамки моей компетенции, поэтому я не могу просматривать журналы на стороне сервера, когда это происходит. Я понятия не имею, что может быть причиной этого, поэтому я надеялся, что вы, ребята, взгляните.
Этот код немного уродлив, просто потому, что мне не хотелось тратить на него много времени (а часть написана другим разработчиком). В любом случае, я не вижу никаких очевидных функциональных проблем.
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();
}
}
}
1 ответ
Похоже, процесс идет слишком долго, вам может потребоваться изменить его настройки времени ожидания в IIS...:(
Что я знаю, что вы не можете, извините, не очень полезно-