【问题标题】:Entity & SQL - Error converting data type nvarchar to datetime实体和 SQL - 将数据类型 nvarchar 转换为日期时间时出错
【发布时间】:2018-04-20 08:37:15
【问题描述】:

使用 Entity Framework,我正在运行一个存储过程,但是我得到了这个错误:

将数据类型 nvarchar 转换为日期时间时出错

我从前端2017-11-07T00:00:00 获取值,并将其转换为DateTime 对象preAuthorize.DepositDate。然后我像这样调用存储过程:

var StartingDate = new SqlParameter("@StartingDate", preAuthorize.DepositDate);

dbContextScope.DbContexts.Get<BAEntities>().Database.ExecuteSqlCommand(
     "My_Procedure @StartingDate, ...",
     StartingDate,
     ...
);

我查看了 SQL 分析器,发现语句:

exec sp_executesql N'My_Procedure @StartingDate, ...', N'@StartingDate datetime, ...', @StartingDate='2017-11-07 00:00:00' ...

我在 SQL 中运行了它,它产生了同样的错误。奇怪的是,如果我删除StartingDate,我仍然会收到错误消息。这个存储过程已经存在多年了,所以我相信它与我调用存储过程的方式有关,而不是存储过程逻辑。

如果我把我的价值观直接插入

EXEC Web_Schedule_AddNewSchedule
    @StartingDate = '2017-11-07',
    ...

然后这运行正常并插入数据,所以上面的sp_executesql语句有问题。

编辑:我将呼叫更改为

dbContextScope.DbContexts.Get<BAEntities>().Database.ExecuteSqlCommand(
         "My_Procedure @StartingDate = @StartingDate, ...",
         StartingDate,
         ...
);

在我设置的字符串中@StartingDate = @StartingDate, 它只有在我这样做之后才有效,但是我在网上看到的所有示例都没有这个。有人知道为什么吗?

【问题讨论】:

  • 我在 SQL 中运行它并产生相同的错误,您是否在 SQL Server SELECT CONVERT(DATETIME, '2017-11-07T00:00:00') 中运行它并得到错误?我不这么认为。也许您正在传递另一个值而不是 2017-11-07T00:00:00
  • 我的直觉是您的日期时间格式与预期的不同。
  • @Sami sp_executesql 代码得到 @StartingDate='2017-11-07 00:00:00' 所以这个值被很好地传递了。
  • 我建议将 EXEC 添加到您的 SP 调用中,即 "EXEC My_Procedure @StartingDate, ..."

标签: c# sql-server entity-framework datetime stored-procedures


【解决方案1】:

您必须在ExecuteSqlCommand 中包含所有可能的参数,而不仅仅是您要设置的参数。

【讨论】:

    猜你喜欢
    • 2017-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-04
    • 2015-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多