Я только что начал работу с веб-приложением, использующим страницы aspx, C # позади.Все сидят на SQL Server.Все данные доставляются с помощью хранимых процедур.Почти все процедуры являются динамическим SQL, с оператором sql, встроенным в саму процедуру на основе переданных параметров.
Существует три практически идентичных страницы, единственное отличие состоит в том, что параметры передаются в SQL и некоторые метки,Страница загружает одну сетку и три раскрывающихся списка при открытии.Есть два других вида сетки, но они не загружаются до тех пор, пока не будет предоставлена более конкретная информация.
С объявлением сайта одна из этих страниц получает широкое применение.И много ошибок времени ожидания SQL.Тем не менее, если я перейду на другую из трех страниц, которые они выполняют быстро, никакой ощутимой паузы в загрузке данных.И если я запускаю процедуры, все они выполняются менее чем за секунду, в то время как на странице истекает время ожидания.Так что я не думаю, что это на самом деле тайм-ауты из-за низкой производительности SQL Server.
Я - человек из БД, а не программист, которого заставили добровольно заняться созданием этого сайта для пары клубов.,Я учился на лету, и многие из моих ответов приходят с этого сайта.Но в этом случае я даже не знаю, что мне нужно искать.Я предоставил информацию ниже, которая кажется актуальной.Я рад обновить с полным .aspx и .cs, если это полезно.
Загрузка страницы проста:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
SelectedDogID.Text = "0";
SelectedTrialID.Text = "0";
SelectedHandlerID.Text = "0";
ddYear.DataBind();
ddTrial.DataBind();
ddTrial.Visible = false;
LabelTrial.Visible = false;
}
}
Сайт https://trialpoints.com/ Этопервая кнопка «USBCHA Sheep», которая является страдающей страницей, на которую все смотрят.Вторые две кнопки почти идентичны, включая использование в основном одних и тех же наборов данных, но они работают хорошо.
Мне кажется, что я сделал что-то неправильное на aspx или C # на страницах, чтобы они моглине обрабатывать несколько запросов (вообще или хотя бы хорошо).Есть только одно место, которое я называю процедурой в C #, остальное - источник данных aspx.Этот фрагмент кода:
protected void ddTrial_SelectedIndexChanged(object sender, EventArgs e)
{
SelectedTrialID.Text = ddTrial.SelectedValue;
if (SelectedTrialID.Text != "0")
{
mvPoints.ActiveViewIndex = 3;
rbTrial.Checked = true;
GridViewIndTrial.DataBind();
//Now populate the fields at the top of the form
SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString);
SqlCommand cmd = new SqlCommand("SingleTrialReturnDetailsForPointsPage", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@Organization", SqlDbType.NVarChar, 30));
cmd.Parameters.Add(new SqlParameter("@TrialID", SqlDbType.Int, 4));
cmd.Parameters["@Organization"].Value = Convert.ToString(tbOrganization.Text);
cmd.Parameters["@TrialID"].Value = Convert.ToInt32(ddTrial.SelectedValue);
conn.Open();
using (SqlDataReader read = cmd.ExecuteReader())
// Data is accessible through the DataReader object here.
{
while (read.Read())
{
lblTrialID.Text = (read["TrialID"].ToString());
lblTrialID.Text = (read["TrialID"].ToString());
lblTrialName.Text = (read["TrialName"].ToString());
lblTrialDate.Text = (read["TrialDate"].ToString());
lblTrialYear.Text = (read["TrialYear"].ToString());
lblDogsToPost.Text = (read["DogsToPost"].ToString());
lblDogsWithPoints.Text = (read["DogsWPoints"].ToString());
GridViewIndTrial.Caption = (read["TrialName"].ToString());
}
read.Close();
}
conn.Close();
conn.Dispose();
}
else
{
GridViewIndTrial.DataSource = null;
lblTrialID.Text = Convert.ToString("");
lblTrialName.Text = Convert.ToString("");
lblTrialDate.Text = Convert.ToString("");
lblTrialYear.Text = Convert.ToString("");
lblDogsToPost.Text = Convert.ToString("");
lblDogsWithPoints.Text = Convert.ToString("");
GridViewIndTrial.Caption = Convert.ToString("");
}
}
Сообщение об ошибке после ожидания на медленной странице:
[Win32Exception (0x80004005): The wait operation timed out]
[SqlException (0x80131904): Execution Timeout Expired. The timeout period elapsed prior to completion of the operation or the server is not responding.]
System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +212
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +81
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +630
System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +4222
System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() +58
System.Data.SqlClient.SqlDataReader.get_MetaData() +89
System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted) +437
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest) +2617
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry) +1636
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +64
System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +243
System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) +37
System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior) +10
System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +138
System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +134
System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable) +84
System.Web.UI.WebControls.SqlDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments) +1441
System.Web.UI.WebControls.ListControl.OnDataBinding(EventArgs e) +286
System.Web.UI.WebControls.ListControl.PerformSelect() +36
System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +71
System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +93
System.Web.UI.WebControls.BaseDataBoundControl.set_RequiresDataBinding(Boolean value) +104
System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewChanged(Object sender, EventArgs e) +15
System.Web.UI.DataSourceView.OnDataSourceViewChanged(EventArgs e) +99
System.Web.UI.WebControls.SqlDataSourceView.SelectParametersChangedEventHandler(Object o, EventArgs e) +36
System.Web.UI.WebControls.ParameterCollection.OnParametersChanged(EventArgs e) +20
System.Web.UI.WebControls.Parameter.UpdateValue(HttpContext context, Control control) +143
System.Web.UI.WebControls.ParameterCollection.UpdateValues(HttpContext context, Control control) +102
System.Web.UI.WebControls.ParameterCollection.GetValues(HttpContext context, Control control) +37
System.Web.UI.WebControls.SqlDataSourceView.InitializeParameters(DbCommand command, ParameterCollection parameters, IDictionary exclusionList) +257
System.Web.UI.WebControls.SqlDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments) +579
System.Web.UI.WebControls.ListControl.OnDataBinding(EventArgs e) +286
System.Web.UI.WebControls.ListControl.PerformSelect() +36
System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +71
System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +93
System.Web.UI.WebControls.ListControl.OnPreRender(EventArgs e) +23
System.Web.UI.Control.PreRenderRecursiveInternal() +166
System.Web.UI.Control.PreRenderRecursiveInternal() +236
System.Web.UI.Control.PreRenderRecursiveInternal() +236
System.Web.UI.Control.PreRenderRecursiveInternal() +236
System.Web.UI.Control.PreRenderRecursiveInternal() +236
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +4720