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