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...:(

Что я знаю, что вы не можете, извините, не очень полезно-

Другие вопросы по тегам