Проблема с параметром сеанса "Должен объявить скалярную переменную"

У меня проблема с этим кодом.

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

Я буду рад получить вашу помощь, чтобы выяснить, что является причиной этой ошибки.

Благодарю.

3 ответа

Я нашел ответ.

Кажется, что asp.net sql SqlDataSource не позволяет использовать одно и то же имя параметра в том же разделе.

удаление и вставка имеют одинаковый параметр сеанса с именем Name="username" . Мне просто нужно изменить имя одного из них, и это работает.

Я просто спрашиваю, почему asp.net не предупреждает об этой проблеме перед компиляцией.

спасибо ребята за помощь.

Кажется, все в порядке со стороной.Net. Можете ли вы опубликовать SQL для функции DeleteAppointmentByUser? Подозреваю, что проблема там.

Возможно, вы можете попробовать обходной путь:

<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
}
Другие вопросы по тегам