我对此代码有疑问。
<asp:SqlDataSource ID="ReservationRadSchedualerSqlDataSource" OnDeleting="ReservationRadSchedualerSqlDataSource_Deleting" runat="server" ConnectionString="<%$ ConnectionStrings:NMRconstr %>"
SelectCommand="GetReservationAppointments" SelectCommandType="StoredProcedure"
InsertCommand="INSERT INTO [ReservationAppointments] (Subject , Description, Start, [End], RecurrenceRule , Username , MachinePKID) VALUES (@Subject , @Description, @Start, @End, @RecurrenceRule , @username , @macPKID)"
UpdateCommand="EXEC UpdateReservationAppointment @Subject , @Description , @Start , @End , @RecurrenceRule , @username , @ID , @macPKID"
DeleteCommand="EXEC DeleteAppointmentByUser @ID , @username"
>
<UpdateParameters>
<asp:ControlParameter ControlID="ReservationScedhualerSelectMachineRadDropDownList" Name="macPKID" PropertyName="SelectedValue" Type="Int32" />
</UpdateParameters>
<SelectParameters>
<asp:ControlParameter ControlID="ReservationScedhualerSelectMachineRadDropDownList" Name="macPKID" PropertyName="SelectedValue" Type="Int32" />
</SelectParameters>
<InsertParameters>
<asp:SessionParameter Name="username" SessionField="username" Type="string" />
<asp:ControlParameter ControlID="ReservationScedhualerSelectMachineRadDropDownList" Name="macPKID" PropertyName="SelectedValue" Type="Int32" />
</InsertParameters>
<DeleteParameters>
<asp:SessionParameter Name="username" SessionField="username" Type="string" />
</DeleteParameters>
</asp:SqlDataSource>
在删除命令参数中,会话用户名参数会导致错误&#34;必须声明标量变量&#34; @ username&#34;。&#34;
我试图弄清楚我做错了什么,但我找不到。 奇怪的是它适用于INSERT和UPDATE命令,但不适用于DELETE命令。
我很乐意帮助您找出导致此错误的原因。
感谢。
答案 0 :(得分:0)
也许您可以尝试一种解决方法:
<DeleteParameters>
<asp:Parameter Name="username" Type="String" />
</DeleteParameters>
将此属性添加到SQL数据源:
OnDeleting="On_Deleting"
然后在后端代码:
protected void On_Deleting(Object sender, SqlDataSourceCommandEventArgs e)
{
e.Command.Parameters["@username"].Value = // value from session
}
答案 1 :(得分:0)
.Net方面的一切似乎都是顺序的。你可以发布DeleteAppointmentByUser函数的SQL吗?怀疑问题就在那里。
答案 2 :(得分:0)
我找到了答案。
似乎asp.net sql SqlDataSource不允许将相同名称的参数放入同一节。
删除和插入具有相同的会话参数,名称为Name =&#34; username&#34; 。我只需要更改其中一个的名称就可以了。
我只是问为什么asp.net在编译之前没有提醒这个问题。
谢谢你的帮助。