简体   繁体   English

从C#Dapper中的方法调用将DATETIME参数发送到SP

[英]sending DATETIME parameters to SP from Method Call In C# Dapper

I have following SP in SQL Server 我在SQL Server中有以下SP

CREATE PROCEDURE [dbo].[SPGetData] 

       @StartDate DATETIME,
       @EndDate DATETIME

AS
            BEGIN
                  SELECT *
                  FROM SampleTable
                  WHERE CAST(SampleTable.CreateDate AS DATE) BETWEEN  CAST(@StartDate AS DATE) AND CAST(@EndDate AS DATE)                   
            END
END
GO

When I test this SP from Management Studio this is working fine , But I should Pass StartDate and EndDate values as following 当我从Management Studio测试此SP时,它工作正常,但是我应该按以下方式传递StartDate和EndDate值

在此处输入图片说明

DECLARE @return_value int

EXEC    @return_value = [dbo].[SPGetStationData]
        @StartDate = N'2016/10/08',
        @EndDate = N'2016/10/09'

SELECT  'Return Value' = @return_value

GO

I want to send parameters from my back end c# program , 我想从后端c#程序发送参数,

So created method as following 如此创建的方法如下

    public IEnumerable<ModelClass> GetDetails(DateTime? startdate, DateTime? enddate)
    {
        using (SqlConnection cnn = this.OpenConnection())
        {

            DynamicParameters parameters = new DynamicParameters();
            parameters.Add("@StartDate", startdate);
            parameters.Add("@EndDate", enddate);

            IList<ModelClass> SampleList = SqlMapper.Query<ModelClass>(cnn, "SPGetData", parameters, commandType: CommandType.StoredProcedure).ToList();

            cnn.Close();

            return SampleList.ToList();
        }
    }

But when I debug this I can see values coming to this method as in Following format 但是当我调试它时,我可以看到以下方法中的值到达此方法

在此处输入图片说明

in Stored Procedure asking YYYY/MM/DD format but I have here in DD/MM/YYYY HH:MM:SS AM/PM format 在存储过程中询问YYYY/MM/DD格式,但我在这里使用DD/MM/YYYY HH:MM:SS AM/PM格式

what should I do to do this to acceptable with SP asking format 我应该怎么做才能做到这一点与SP询问格式可以接受

My working code, 我的工作代码

// Store procedure
CREATE PROCEDURE [dbo].[SPGetData] 
       @StartDate nvarchar(50) = null, -- change 
       @EndDate nvarchar(50) = null -- change 
AS
    BEGIN
       -- change  in where condition
       SELECT *
       FROM SampleTable
       WHERE 
        DATEPART(yyyy,cast(SampleTable.CreateDate as date)) BETWEEN DATEPART(yyyy,cast(@StartDate as date)) and DATEPART(yyyy,cast(@EndDate as date))
    END
END
GO

// Visual Studio Code for dapper
public IEnumerable<ModelClass> GetDetails(DateTime? startdate, DateTime? enddate)
    {

var _para = new DynamicParameters();
    _para.Add("@StartDate", startdate);
    _para.Add("@EndDate", enddate);
    var _list = _con.Query<ModelClass>("SPGetData", _para, commandType: CommandType.StoredProcedure); // _con is SqlConnection _con = new SqlConnection("your connection string")
            return _list;
    }

The following code works fine for me. 以下代码对我来说很好用。

void Main()
{
    DateTime? s=null;
    DateTime? e=DateTime.Today;
    Test(s,e);
}

void Test(DateTime? startDate, DateTime? endDate)
{
    var cs=@"data source=(local);database=test;integrated security=true";
    using (var con = new SqlConnection(cs))
    {
        con.Open();
        var t = con.Query<string>("TestIt", new { startDate, endDate},
                commandType: CommandType.StoredProcedure);

        $"List: {t.FirstOrDefault()}".Dump();
    }
}

Here is the procedure: 步骤如下:

ALTER PROC TestIt
(
    @startDate datetime2,
    @endDate datetime2
)
AS
BEGIN
    SELECT 'Start: ' + CASE WHEN @startDate IS NULL THEN 'Null' ELSE CONVERT(VARCHAR(35), @startDate, 106) END +
            '\r\nEnd: ' + CASE WHEN @endDate IS NULL THEN 'Null' ELSE CONVERT(VARCHAR(35), @endDate, 106) END
END

Just note that unlike the code in comment I'm not defining any property names when passing parameters: 请注意,与注释中的代码不同,我在传递参数时没有定义任何属性名称:

new { startDate, endDate}

As the procedure parameter names are same as the variable that I'm passing to the method. 由于过程参数名称与我要传递给方法的变量相同。 To use same code as in comment, you can modify it as this: 要使用与注释中相同的代码,可以按以下方式对其进行修改:

cnn.Query<ModelClass>("SPGetData",  
   new { StartDate=startDate??null, EndDate=endDate??null}, 
    commandType:CommandType.StoredProcedure).ToList()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM