繁体   English   中英

如何使用存储过程从 SQL Server 获取数据

[英]How to get data from SQL Server using a stored procedure

我无法使用存储过程从数据库中获取值。 请看下面的代码:

class LaneModel
{
    public string Name { get; set; }
    public int Lane { get; set; }
    public int ManualCount { get; set; }
    public int ReadCount { get; set; }
    public int TotalTransaction { get; set; }
    public string DateTime { get; set; } = System.DateTime.Now.ToString("yyyy/MM/dd");
}

从数据库中获取数据

public async Task<List<LaneModel>> GetLaneData()
{
    try
    {
        var db = new ApplicationDbContext();
        db.Database.Initialize(true);

        using (var cnxn = db.Database.Connection)
        {
            cnxn.Open();

            var cmd = cnxn.CreateCommand();
            var sp = @"GetManualTransactions";
            cmd.CommandText = sp;
            cmd.CommandType = CommandType.StoredProcedure;

            var dtFrom = cmd.CreateParameter();
            dtFrom.ParameterName = "@DateFrom";
            dtFrom.DbType = DbType.Date;
            dtFrom.Direction = ParameterDirection.Input;
            dtFrom.Value = DateTime.Now.ToString("MM/dd/yyyy");

            cmd.Parameters.Add(dtFrom);

            using (var reader = await cmd.ExecuteReaderAsync())
            {
                try
                {
                    var result = ((IObjectContextAdapter) db)
                        .ObjectContext
                        .Translate<LaneModel>(reader)
                        .ToList();
                    return result;   =========================> I always get 0
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    return null;
                }
            }
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
        return null;
    }
}

SQL中的存储过程

 @DateFrom AS DATE
    if OBJECT_ID('tempdb..#etc_correlated') IS NOT NULL 
        DROP TABLE #etc_correlated

    SELECT 
        t2.Name, 
        t2.Lane,
        SUM(IIF(READ_STATUS = 'M', 1, 0)) As ManualCount,
        SUM(IIF(READ_STATUS = 'R', 1, 0)) As ReadCount
    into #etc_correlated 
    FROM [HQ_JOINT_DB_TPLEX].DBO.ETC_CORRELATED AS t1
    INNER JOIN [Gen_Report].dbo.Plaza AS t2
        ON t1.EXIT_PLAZA = t2.Code
    AND t1.EXIT_LANE = t2.Lane
    AND CONVERT(DATE, EXIT_TRXN_DTIME) = @DateFrom
    GROUP BY t2.Name, t2.Lane, READ_STATUS

    select Name,
           Lane,
           sum(ManualCount) ManualCount,
           sum(ReadCount) ReadCount,
           sum(ManualCount)  + sum(ReadCount) TotalTransaction
    from #etc_correlated
    group by Name,Lane

但是如果我在程序本身中提供日期('02/10/2020'),我就会得到结果。 我怎样才能使这项工作?

您是否尝试过使用适当的日期对象?

    dtFrom.ParameterName = "@DateFrom";        
    dtFrom.DbType = DbType.Date;
    dtFrom.Direction = ParameterDirection.Input;
    dtFrom.Value = DateTime.Now.Date;

暂无
暂无

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

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