【问题标题】:Cannot convert NVARCHAR to datetime2 in stored procedure accessed by EF无法在 EF 访问的存储过程中将 NVARCHAR 转换为 datetime2
【发布时间】:2020-04-14 22:18:25
【问题描述】:

我正在尝试从 C# 执行存储过程

var dt = new SqlParameter("ExportedOn", DateTime.Now);
context.Database.ExecuteSqlCommand("EXEC LogDataExport @ExportedOn", dt);

存储过程:

CREATE PROCEDURE LogDataExport
    (@ExportedOn DATETIME2)
AS 
    INSERT INTO dbo.DataExportLogging (Id, ExportedOn, Description, Text)
        SELECT 1, @ExportedOn, 'asd', 'dsasadfsdag'
GO

我收到一个错误,提示 dt 无法从 NVARCHAR 转换为 Datetime2

【问题讨论】:

  • 尝试在 SqlParameter 上指定数据类型。 dt.SqlDbType = SqlDbType.DateTime2;
  • 是编译时错误还是运行时错误? 确切错误是什么?
  • 请为DataExportLogging分享CREATE TABLE脚本。

标签: c# sql entity-framework


【解决方案1】:

如果您喜欢服务器端解决方案,您可以将dbo.DataExportLogging.ExportedOn 列默认值设置为getdate()

【讨论】:

  • 这将获取数据库服务器而不是客户端应用程序时区中的日期。所以不是完全一样。
  • 如果您使用Datetime2 作为您的数据类型(推荐!),您还应该停止使用getdate() 并改用sysdatetime()
猜你喜欢
  • 2022-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多