实体& SQL - 将数据类型nvarchar转换为datetime

时间:2017-11-07 20:00:24

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

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

  

将数据类型nvarchar转换为datetime时出错

我从前端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,中的位置仅在我执行此操作后才有效,但我在网上看到的所有示例都没有。有人知道为什么吗?

1 个答案:

答案 0 :(得分:0)

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