1

我对此代码有疑问。

    <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>

删除命令参数中,会话用户名参数导致错误“必须声明标量变量“@username”。”

我试图弄清楚我做错了什么,但我找不到。奇怪的是它适用于 INSERT 和 UPDATE 命令,但不适用于 DELETE 命令。

我很乐意得到您的帮助以找出导致此错误的原因。

谢谢。

4

3 回答 3

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
}
于 2015-05-29T15:47:37.973 回答
0

.Net 方面的一切似乎都井然有序。您可以发布 DeleteAppointmentByUser 函数的 SQL 吗?怀疑问题在那里。

于 2015-05-29T15:57:29.293 回答
0

我找到了答案。

似乎asp.net sql SqlDataSource 不允许同名参数进入同一节。

删除和插入都具有名称相同的会话参数 Name="username" 。我只需要更改其中一个的名称就可以了。

我只是问为什么 asp.net 在编译之前没有提醒这个问题。

谢谢你们的帮助。

于 2015-05-29T16:02:59.527 回答