Quantcast
Channel: ADO.NET, Entity Framework, LINQ to SQL, NHibernate
Viewing all articles
Browse latest Browse all 1698

passing null datetime into sproc

$
0
0

i have a sproc with 2 datetime parameters that are nullable.   I have a C# method to call that sproc and get the results.  It works fine when running it in SQL server.   When I run it in the page, I get an error converting data type datetime2 to datetime.    The data type in SQL Server that I am using is datetime not datetime2

Here is the sproc  

CREATE PROCEDURE [dbo].[ApplicantList]

@LocationID int,
@FolderID int,
@JobID int,
@Archive int,
@AdminID nvarchar(15),
@AppArchive tinyint,
@StartDate datetime = NULL,
@EndDate datetime = NULL

AS

SET NOCOUNT ON

DECLARE @RoleID int

SELECT 
	@RoleID = RoleID 
FROM
	dbo.AdminUsers
WHERE
	AdminID = @AdminID 

 
IF @RoleID < 4
	BEGIN
		SELECT DISTINCT
			JA.ApplicantID,
			JA.ApplicationID,
			JA.QQViewed,
			JA.AppViewed,
			JA.CVViewed,
			JA.SSViewed,
			JA.RptViewed,
			A.PrescreenScore,
			A.ApplyDate,
			A.GivenName,
			A.FamilyName,
			J.JobTitle,
			L.AreaName
		FROM
			dbo.Applicant JA INNER JOIN
			dbo.Application A ON A.ApplicationID = JA.ApplicationID INNER JOIN
			dbo.Jobs J ON A.JobID = J.JobID INNER JOIN
			dbo.Locations L ON JA.LocationID = L.LocationID
		WHERE
			(JA.LocationID = @LocationID OR @LocationID = 9999)
			AND (JA.FolderID = @FolderID OR @FolderID = 99)
			AND (A.JobID = @JobID OR (@JobID = 9999  AND (@Archive = 2 OR J.Archived = CAST(@Archive AS bit))))
			AND (JA.Archived = @AppArchive OR @AppArchive = 2)
			AND A.ApplyDate >= CASE WHEN @StartDate IS NULL THEN A.ApplyDate ELSE @StartDate END
			AND A.ApplyDate < CASE WHEN @EndDate IS NULL THEN DATEADD(d,1,A.ApplyDate) ELSE DATEADD(d,1,@EndDate) END
	END
IF @RoleID = 4 -- Division Mgr
	BEGIN
		SELECT DISTINCT
			JA.ApplicantID,
			JA.ApplicationID,
			JA.QQViewed,
			JA.AppViewed,
			JA.CVViewed,
			JA.SSViewed,
			JA.RptViewed,
			A.PrescreenScore,
			A.ApplyDate,
			A.GivenName,
			A.FamilyName,
			J.JobTitle,
			L.AreaName
		FROM
			dbo.Applicant JA INNER JOIN
			dbo.Application A ON A.ApplicationID = JA.ApplicationID INNER JOIN
			dbo.Jobs J ON A.JobID = J.JobID INNER JOIN
			dbo.Locations L ON JA.LocationID = L.LocationID
		WHERE
			(JA.LocationID = @LocationID OR @LocationID = 9999)
			AND (JA.FolderID = @FolderID OR @FolderID = 99)
			AND (A.JobID = @JobID OR (@JobID = 9999  AND (@Archive = 2 OR J.Archived = CAST(@Archive AS bit))))
			AND J.DivisionID IN (SELECT DivisionID FROM dbo.DivisionManager WHERE AdminID = @AdminID)
			AND (JA.Archived = @AppArchive OR @AppArchive = 2)
			AND A.ApplyDate >= CASE WHEN @StartDate IS NULL THEN A.ApplyDate ELSE @StartDate END
			AND A.ApplyDate < CASE WHEN @EndDate IS NULL THEN DATEADD(d,1,A.ApplyDate) ELSE DATEADD(d,1,@EndDate) END
	END

here is the method in the class

 public class ApplicantListing
    {
        NewAMSEntities db = new NewAMSEntities();
        public int Archive { get; set; }    
        public int JobID { get; set; }
        public int FolderID { get; set; }
        public int LocationID { get; set; } 
        public string AdminID { get; set; }
        public byte AppArchive {get; set; }
        public Nullable<DateTime> StartDate { get; set; }
        public Nullable<DateTime> EndDate { get; set; }

        public List<ApplicantList_Result> ListOfApplicants()
        {
            return db.ApplicantList(LocationID, FolderID, JobID, Archive, AdminID, AppArchive, StartDate, EndDate).ToList();
        }
    }

and here is my controller

[HttpPost]
public ActionResult Index(int Archive, int JobID, int LocationID, int FolderID, string AdminID, byte AppArchive, string StartDate, string EndDate, ApplicantListing App)
{
    ViewData["AdminID"] = System.Web.HttpContext.Current.Session["AdminID"] as String;
    if (ViewData["AdminID"] != null)
    {
        ViewBag.FirstLoad = false;
        ViewBag.AdminID = AdminID;
        App.AdminID = AdminID;
        var Jobs = App.listJobs();
        ViewBag.JobID = Jobs;

        var folderlist = App.listFolders();
        ViewBag.FolderID = folderlist;

        var loclist = App.listLocations();
        ViewBag.LocationID = loclist;

        switch (FolderID)
        {
            case 1:
            case 3:
            case 4:
            case 5:
            case 6:
                ViewBag.Moveable = true;
                break;
            default:
                ViewBag.Moveable = false;
                break;
        }

                
        App.Archive = Archive;
        App.JobID = JobID;
        App.FolderID = FolderID;
        App.LocationID = LocationID;
        App.AdminID = AdminID;
        App.AppArchive = AppArchive;
        if(StartDate != "")
        {
            App.StartDate = Convert.ToDateTime(StartDate);
        }
        if(EndDate != "")
        {
            App.EndDate = Convert.ToDateTime(EndDate);
        }
        List<ApplicantList_Result> applicantList = App.ListOfApplicants();
        ViewBag.Applicants = applicantList;
        List<ListFoldersAvailabe_Result> AvaFolders = App.AvailableFolders();
        List<ListAvailableReasons_Result> AvaReasons = App.AvailableReasons();
        List<ListAvailableDispositions_Result> AvaDispositions = App.AvailableDispostions();
        ViewBag.AvaFolders = AvaFolders;
        ViewBag.Reasons = AvaReasons;
        ViewBag.Dispositions = AvaDispositions;
        return View();
    }
    return View("LoggedOut");
}

What do i have wrong?    How do I use this when the date fields are allowed to be null in the procedure?


 

 


Viewing all articles
Browse latest Browse all 1698

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>