不允许从数据类型 sql_variant 隐式转换为 varchar

Kin*_*mar 3 c# sql-server entity-framework dapper asp.net-core

使用 Dapper 从 .NET Entity Framework 调用存储过程时出现此错误。

不允许从数据类型 sql_variant 隐式转换为 varchar。

存储过程参数为@Name nvarchar(50) = NULL

因此理想情况下,它应该接受空值。当我调用存储过程并@Name = null从 .NET 传递时,出现此错误。

这是存储过程:

CREATE PROCEDURE [dbo].[Member_Add]
    @Id NVARCHAR(50)  = NULL,
    @Name NVARCHAR(50)  = NULL
AS
BEGIN
    INSERT INTO [dbo].Member (Id, Name)
    VALUES (@Id, @Name)
END
Run Code Online (Sandbox Code Playgroud)

Kin*_*mar 8

Dapper 在内部映射objectsql_variant. 当我通过时,null它正在将其视为object类型。正如我的存储过程所期望的那样varcharsql_variant无法转换为它。

我开始传递string.Empty而不是null对象,并且工作正常。

@Name = Request.Name??string.Empty;

  • 是的,我猜这正在发生。您应该向我们展示您如何致电您的 SP 无论如何,很高兴您解决了这个问题。 (2认同)