[英]Stored procedures returning null value in razor pages
我有兩個將根據條件執行的存儲過程。
第一個存儲過程: AvailableHourSlots
:
CREATE PROCEDURE [dbo].[AvailableHourSlots]
@ActivityName nvarchar(max) ,
@BookedDate datetime2(7)
AS
SELECT DISTINCT HourlyBasedTime
FROM ManageBooking AS mb, HourlyBased AS hb
WHERE bookingdate = @BookedDate
AND ActivityName = @ActivityName
AND (SUBSTRING(HourlyBasedTime, 1, 2) <> SUBSTRING(mb.PreferredTimeslot, 1, 2))
第二個存儲過程: AvailableHalfAnHourSlots
:
CREATE PROCEDURE [dbo].[AvailableHalfAnHourSlots]
@ActivityName nvarchar(max) ,
@BookedDate datetime2(7)
AS
SELECT DISTINCT hh.halfanhourtime
FROM ManageBooking AS mb, Halfanhour hh
WHERE bookingdate = @BookedDate
AND ActivityName = @ActivityName
AND (SUBSTRING(hh.halfanhourtime, 1, 5) <> SUBSTRING(mb.PreferredTimeslot, 1, 5))
AND (RIGHT(hh.halfanhourtime, 5) <> RIGHT(mb.PreferredTimeslot, 5))
Model是基於第一個存儲過程output創建的:
namespace ActivityBookingSystem.Models
{
public class HourlyBasedView
{
public string HourlyBasedTime { get; set; }
}
}
ApplicationDbContext
:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<NonOperatingDaysView>().HasNoKey();
modelBuilder.Entity<AvailableOneHourSlots>().HasNoKey();
modelBuilder.Entity<HourlyBasedView>().HasNoKey();
//modelBuilder.Ignore<HourlyBasedView>(); //ignore create the table for the stored procedure
//modelBuilder.Query<HourlyBasedView>();
}
public DbSet<ActivityBookingSystem.Models.HourlyBasedView> HourlyBasedView { get; set; }
create.cshtml
- Ajax 調用:
function GetAvailableSlots(e) {
var rootPath = '@Url.Content("~")';
alert("Hi");
var ActivityList = document.getElementById("DrpDwnActivityList");
var ActivityListValue = ActivityList.options[ActivityList.selectedIndex].value;
var BookedDate = document.getElementById("DateBookedDate").value;
$.ajax({
type: "Get",
url: rootPath + "/ManageBooking/Create?handler=GetAvailableSlots",
headers: { "RequestVerificationToken": $('input[name="__RequestVerificationToken"]').val() },
data: { Duration: e.value,ActivityName:ActivityListValue,BookedDate:BookedDate },
dataType: "json",
success: function (result) {
//console.log(result), //just for debug
// $("#TrainingType").val(result.trainingType), //mind this should be lower-case letters by default setting
// $("#TrainingVersion").val(result.version),
// $("#SessionType").val(result.sessionType)
alert(result);
},
error: function (data) {
alert(data);
}
});
}
create.cshtml.cs
:
public async Task<JsonResult> OnGetGetAvailableSlotsAsync(string ActivityName, string BookedDate, string Duration)
{
Console.WriteLine(Duration);
DateTime BookingDate = Convert.ToDateTime(BookedDate);
ActivityName = ActivityName.ToString();
if (Duration == "1 Hour")
{
var LstPreferredTimeSlot = _context.HourlyBasedView.FromSqlRaw("EXEC dbo.AvailableHourSlots @BookingDate = {0}, @ActivityName = {1}", BookingDate, ActivityName)
.AsNoTracking().ToList();
// var PreferredTimeSlot = await _context.HourlyBasedView.FromSqlRaw($"SELECT distinct HourlyBasedTime FROM ManageBooking as mb, HourlyBased as hb WHERE bookingdate = {BookingDate} and ActivityName = {ActivityName} and (substring(HourlyBasedTime,1,2) <> substring(mb.PreferredTimeslot,1,2))").ToListAsync();
}
return new JsonResult(LstPreferredTimeSlot);
}
存儲過程返回 null 值,我在 SQL Server Management Studio 中單獨執行查詢,它返回值。
任何幫助,將不勝感激!
編輯 create.cshtml.cs
if (Duration == "1 Hour")
{
var LstPreferredTimeSlot = _context.HourlyBasedView.FromSqlRaw("EXEC dbo.AvailableHourSlots @BookedDate = {0}, @ActivityName = {1}", BookingDate, ActivityName).
AsNoTracking().ToList();
}
日期參數傳遞錯誤。 修正后的版本如下圖
if (Duration == "1 Hour")
{
var LstPreferredTimeSlot = _context.HourlyBasedView.FromSqlRaw("EXEC dbo.AvailableHourSlots @BookedDate = {0}, @ActivityName = {1}", BookingDate, ActivityName).AsNoTracking().ToList();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.