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

时间:2019-12-13 05:26:49

标签: c# sql-server entity-framework asp.net-core dapper

使用Dapper从.NET实体框架调用存储过程时,出现此错误。

  

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

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

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

这是存储过程:

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

1 个答案:

答案 0 :(得分:6)

Dapper正在内部将object映射到sql_variant。当我通过null时,它正在将其视为object类型。由于我的存储过程期望varchar,所以sql_variant不能转换为它。

我开始传递string.Empty而不是null对象,它运行正常。

  

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