【问题标题】:No value given for one or more required parameters asp.net error没有为一个或多个必需参数提供值 asp.net 错误
【发布时间】:2018-05-07 02:37:15
【问题描述】:

我的代码有问题,我已经尝试修复了好几个小时。基本上,该程序的目标是让用户登录,然后他们基本上可以填写一个电影评论页面。从理论上讲,每个用户只能为每部电影留下一个评论——尽管我还没有得到验证。现在,它只是一直说其中一个参数没有任何价值,所以如果有人能提供帮助,那就太棒了。

<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:没有为一个或多个必需参数提供值。

来源错误:

在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常来源和位置的信息。

堆栈跟踪:

[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 行为,字符串方法)+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[] 数据表,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(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +883

【问题讨论】:

    标签: asp.net parameters detailsview


    【解决方案1】:

    这是拼写错误的情况。 会话变量以 N 大写命名,而 aspx 中的检索以小写形式命名

    在 aspx 中

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

    在后面的代码中

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

    此外,一旦 Response.Redirect,会话设置将不会被执行。

    您的登录页面如何重定向回引荐来源网址以及是否设置 firstname 变量也需要检查,因为它会影响从会话中检索 UserName .

    您需要在此行中放置一个调试器以识别实际问题。但是,变量名需要先修正(最好使用常量文件来存储这样的标识符)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多