【问题标题】:StoredProcedure In EntityFramework DateTime Error实体框架中的存储过程日期时间错误
【发布时间】:2015-05-14 15:35:18
【问题描述】:

在我的项目中,我使用了 EntityFramework 5,并想在我的 Context 中使用 SP。像这样

public virtual object GetEvaluations(int AgentId, DateTime StartDate, DateTime EndDate, int FormId)
{
    DataTable table = new DataTable();
    using (DbDataAdapter adapter = new SqlDataAdapter())
    {
        adapter.SelectCommand = _context.Database.Connection.CreateCommand();
        adapter.SelectCommand.Parameters.Clear();
        adapter.SelectCommand.CommandType = CommandType.StoredProcedure;
        adapter.SelectCommand.CommandText = "GetEvaluations";

        SqlParameter aid = new SqlParameter("@AgentId", SqlDbType.Int);
        aid.Value = AgentId;
        SqlParameter sd = new SqlParameter("@StartDate", StartDate.Date.ToString("dd.MM.yyyy"));
        SqlParameter ed = new SqlParameter("@EndDate", EndDate.Date.ToString("MM.dd.yyyy"));
        SqlParameter fid = new SqlParameter("@FormId", SqlDbType.Int);
        fid.Value = FormId;

        adapter.SelectCommand.Parameters.Add(aid);
        adapter.SelectCommand.Parameters.Add(sd);
        adapter.SelectCommand.Parameters.Add(ed);
        adapter.SelectCommand.Parameters.Add(fid);

        adapter.Fill(table);
    }

    return table;
}

这里的 DateTime 格式不同,但只是这样工作。甚至这 2 个参数也在查找表中的同一字段。

请查看日期时间格式(它们是不同的)我认为它们必须是相同的样式。

我的 SP:

USE [EvaluationAssistt]
GO
/****** Object:  StoredProcedure [dbo].[GetEvaluations]    Script Date: 12.03.2015 11:25:08 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      Hammit Yildirim
-- Create date: 11.03.2015
-- Description: Defined for Category Point Reports Performance
-- =============================================
ALTER PROCEDURE [dbo].[GetEvaluations]-- 258,'1.11.2014','11.24.2014',8
@AgentId int,
@StartDate Datetime,
@EndDate Datetime,
@FormId int
AS
BEGIN
    SET NOCOUNT ON;

    select fce.Id from FormsCallsEvaluated fce
        left join FormsCalls fc on fce.CallId = fc.CallId
        where fc.AgentId=@AgentId and fc.DateStarted > @StartDate and fc.DateStarted < @EndDate and fce.FormId=@FormId
END

我的问题是什么

我在下面尝试并返回给我空表

 public virtual object GetEvaluations(int AgentId, DateTime StartDate, DateTime EndDate, int FormId)
    {
        DataTable table = new DataTable();
        using (DbDataAdapter adapter = new SqlDataAdapter())
        {
            adapter.SelectCommand = _context.Database.Connection.CreateCommand();
            adapter.SelectCommand.Parameters.Clear();
            adapter.SelectCommand.CommandType = CommandType.StoredProcedure;
            adapter.SelectCommand.CommandText = "GetEvaluations";

            SqlParameter aid = new SqlParameter("@AgentId", SqlDbType.Int);
            aid.SqlValue = AgentId;
            SqlParameter sd = new SqlParameter("@StartDate", SqlDbType.DateTime);
            sd.SqlValue = StartDate.Date;
            SqlParameter ed = new SqlParameter("@EndDate", SqlDbType.DateTime);
            ed.SqlValue = EndDate.Date;
            SqlParameter fid = new SqlParameter("@FormId", SqlDbType.Int);
            fid.SqlValue = FormId;

            adapter.SelectCommand.Parameters.Add(aid);
            adapter.SelectCommand.Parameters.Add(sd);
            adapter.SelectCommand.Parameters.Add(ed);
            adapter.SelectCommand.Parameters.Add(fid);

            adapter.Fill(table);
        }

        return table;
    }

就像这样在 SQL 端工作

USE [EvaluationAssistt]
GO

DECLARE @return_value int

EXEC    @return_value = [dbo].[GetEvaluations]
        @AgentId = 258,
        @StartDate = N'1.11.2014',
        @EndDate = N'11.24.2014',
        @FormId = 8

SELECT  'Return Value' = @return_value

GO

【问题讨论】:

  • 错误信息到底是什么?在哪条线上?你的GetEvaluations sp的定义是什么?

标签: c# sql datetime stored-procedures frameworks


【解决方案1】:

您将@StartDate 和@EndDate 列定义为DateTime,但您尝试向它们传递字符串值。

只需将正确的类型和值传递给您的参数,例如;

SqlParameter sd = new SqlParameter("@StartDate", StartDate.Date);
SqlParameter ed = new SqlParameter("@EndDate", EndDate.Date);

【讨论】:

  • @JenishRabadiya 到底在哪里?他在where fc.AgentId=@AgentId and fc.DateStarted &gt; @StartDate and fc.DateStarted &lt; @EndDate and fce.FormId=@FormId 中定义了它的参数?
  • 我首先尝试了这种风格,但这给了我空表而不是结果集
  • @SonerGönül adapter.SelectCommand.CommandText = "GetEvaluations"; 不需要是adapter.SelectCommand.CommandText = "GetEvaluations @AgentId @StartDate..."; 所以
  • @JenishRabadiya 不,我从未听说过这样的事情。既然是StoredProcedure,只需sp命名为CommandText,仅此而已。
  • @HamitYıldırım 您是否在添加参数值后逐行调试代码并检查命令?当您在 SSMS 上尝试时它会获取数据?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-12
  • 1970-01-01
相关资源
最近更新 更多