Не задано значение для одного или нескольких обязательных параметров asp.net error - PullRequest
0 голосов
/ 07 мая 2018

У меня проблема с кодом, который я пытаюсь исправить часами. По сути, цель программы состоит в том, чтобы пользователи могли войти в систему, после чего они могут заполнить страницу обзора фильма. Теоретически каждому пользователю разрешено оставлять только одну рецензию на каждый фильм - хотя я еще не получил подтверждение для этого. Прямо сейчас, это просто говорит о том, что для одного из параметров не дано никакого значения, так что, если кто-нибудь сможет помочь, это будет удивительно.

<form id="form1" runat="server">
<div>

<asp:GridView ID="GridReview" runat="server" AutoGenerateColumns="False" DataKeyNames="movieid" DataSourceID="SqlDataSource1">
<Columns> <asp:BoundField DataField="movietitle" HeaderText="movietitle" InsertVisible="False" ReadOnly="false" SortExpression="movietitle" />

<asp:BoundField DataField="Username" HeaderText="User" SortExpression="Username" />
<asp:BoundField DataField="review" HeaderText="Review" SortExpression="review" />
<asp:BoundField DataField="rating" HeaderText="Rating" SortExpression="rating" />
</Columns>
</asp:GridView>

<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" DataKeyNames="movieid" DataSourceID="SqlDataSource1" DefaultMode="Insert" Height="50px" Width="125px" OnItemInserted="DetailsView1_ItemInserted">
<Fields>
<asp:TemplateField HeaderText="MovieTitle" SortExpression="Movieid">
<ItemTemplate>
<asp:DropDownList runat="server" DataSourceID="SqlDataSourceW2" DataTextField="MovieTitle" DataValueField="MovieId"></asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSourceW2" runat="server" ConnectionString="<%$ ConnectionStrings:Database1connectionString %>" ProviderName="<%$ ConnectionStrings:Database1connectionString.ProviderName %>" SelectCommand="SELECT [MovieID], [MovieTitle] FROM [movies_table] ORDER BY [Movietitle]"></asp:SqlDataSource>
</ItemTemplate> 
</asp:TemplateField>
<asp:BoundField DataField="rating" HeaderText="rating" SortExpression="rating" />
<asp:BoundField DataField="review" HeaderText="review" SortExpression="review" />

<asp:CommandField ShowInsertButton="True" />
</Fields>
</asp:DetailsView>

</div>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:Database1ConnectionString %>" SelectCommand="select * from REVIEW_TABLE where (movieid = ?)" InsertCommand="insert [REVIEW_TABLE]
([Username], [MovieID], [MovieTitle], [Rating], [Review])
values (?,?,?,?,?)" ProviderName="<%$ ConnectionStrings:Database1ConnectionString.ProviderName %>" >

<InsertParameters>
<asp:SessionParameter Name="Username" SessionField="Username" Type="String" />
<asp:Parameter Name="movieid" Type="String" />
<asp:Parameter Name="movietitle" Type="String" />
<asp:Parameter Name="rating" Type="String" />
<asp:Parameter Name="review" Type="String" />
</InsertParameters>
</asp:SqlDataSource>


<asp:Label ID="LabelError" runat="server"></asp:Label>
</form>

Вот код, стоящий за

protected void Page_Load(object sender, EventArgs e)
{
    if (Session["firstname"] == null)
    {
        Response.Redirect("login.aspx");
        Session["UserName"] = HttpContext.Current.User.Identity.Name;
    }
}

protected void DetailsView1_ItemInserted(object sender, DetailsViewInsertedEventArgs e)
{
    GridReview.DataBind();
}

и вот ошибка, которую я продолжаю получать

Ошибка сервера в «/» приложении.

Не указано значение для одного или нескольких обязательных параметров.

Описание: во время выполнения текущего веб-запроса произошло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: System.Data.OleDb.OleDbException: для одного или нескольких обязательных параметров не задано значение.

Ошибка источника:

Во время выполнения текущего веб-запроса было сгенерировано необработанное исключение. Информацию о происхождении и местонахождении исключения можно определить с помощью приведенной ниже трассировки стека исключений.

Трассировка стека:

[OleDbException (0x80040e10): для одного или нескольких обязательных параметров не задано значение.]

System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling (OleDbHResult hr) + 1144656
System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult (tagDBPARAMS dbParams, Object & executeResult) + 247
System.Data.OleDb.OleDbCommand.ExecuteCommandText (Object & executeResult) + 208
System.Data.OleDb.OleDbCommand.ExecuteCommand (поведение CommandBehavior, Object & executeResult) + 58
System.Data.OleDb.OleDbCommand.ExecuteReaderInternal (поведение CommandBehavior, метод String) +162 System.Data.OleDb.OleDbCommand.ExecuteReader (поведение CommandBehavior) +110 System.Data.OleDb.OleDbCommand.System.Data.IDbCommand.ExecuteReader (поведение CommandBehavior) +9 System.Data.Common.DbDataAdapter.FillInternal (набор данных DataSet, DataTable [] datatables, int32 startRecord, Int32 maxRecords, String srcTable, команда IDbCommand, поведение CommandBehavior) +139 System.Data.Common.DbDataAdapter.Fill (DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, команда IDbCommand, поведение CommandBehavior) +136 System.Data.Common.DbDataAdapter.Fill (DataSet dataSet, String srcTable) +86 System.Web.UI.WebControls.SqlDataSourceView.ExecuteSelect (аргументы DataSourceSelectArguments) +1474 System.Web.UI.DataSourceView.Select (аргументы DataSourceSelectArguments, обратный вызов DataSourceViewSelectCallback) +22 System.Web.UI.WebControls.DataBoundControl.PerformSelect () +143 System.Web.UI.WebControls.BaseDataBoundControl.DataBind () +74 System.Web.UI.WebControls.GridView.DataBind () +9 System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound () +114 System.Web.UI.WebControls.CompositeDataBoundControl.CreateChildControls () +75 System.Web.UI.Control.EnsureChildControls () +92 System.Web.UI.Control.PreRenderRecursiveInternal () +42 System.Web.UI.Control.PreRenderRecursiveInternal () +160 System.Web.UI.Control.PreRenderRecursiveInternal () +160 System.Web.UI.Page.ProcessRequestMain (логическое значение includeStagesBeforeAsyncPoint, логическое значение includeStagesAfterAsyncPoint) + 883

1 Ответ

0 голосов
/ 07 мая 2018

Это ошибка орфографии. Переменная сеанса имеет имя N с прописной буквы, а извлечение в aspx - в нижнем регистре

В aspx

<asp:SessionParameter Name="Username" SessionField="Username" Type="String" />

В коде позади

Session["UserName"] = HttpContext.Current.User.Identity.Name;

Кроме того, после отклика Response.Redirect настройка сеанса не будет выполнена.

Как ваша страница входа перенаправляется обратно на реферер, и нужно ли также проверять, устанавливает ли она переменную firstname или нет, так как это влияет на получение UserName из сеанса.

Вам необходимо разместить отладчик в этой строке, чтобы определить актуальную проблему. Однако имя переменной необходимо сначала исправить (лучше использовать постоянный файл для хранения таких идентификаторов)

...