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

标签 c# entity-framework-6

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

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;

关于c# - 如何使用存储过程从 SQL Server 获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60145104/

相关文章:

.net - Entity Framework 6 设置连接字符串运行时

c# - Class "object"中的 == 运算符在哪里定义?

c# - EF 枚举所有被忽略的属性

c# - Entity Framework 复合主键-如何获取列的顺序

entity-framework-6 - 动态添加多个包含

c# - C# 中的二分查找

c# - IdentityServer4 外部身份验证 token

c# - 在 C# 中反转 1 位

c# - 如何根据一个 LINQ 查询的结果过滤另一个查询的结果?

c# - Entity Framework 代码首先使用导航属性一个Key