C# 不允许从数据类型sql\U variant隐式转换为varchar

C# 不允许从数据类型sql\U variant隐式转换为varchar,c#,sql-server,entity-framework,asp.net-core,dapper,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) = N

我在使用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

Dapper在内部将
对象
映射到
sql\u变量
。当我传递
null
时,它认为它是
对象
类型。由于我的存储过程需要
varchar
sql\u variant
无法转换为它

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

@Name=Request.Name??string.Empty


SP参数为@Name nvarchar(50)=NULL。因此,理想情况下,它应该接受空值:你错了。它使
@Name
参数成为可选参数,如果您不传递
@Name
,它将分配
NULL
值,并且不会引发异常。您始终可以将
NULL
值传递给参数。@Karan已编辑。我知道我可以传递NULL,在我多次传递NULL之前,我从未见过这个错误。您的代码使用的是数据类型为sql\u variant的参数,而它应该使用varchar。另一个问题是,您已经标记了Dapper和Entity Framework-您肯定没有同时使用它们吗?@KinjalParmar嗯,您可能正在将一个
DBType.object
映射到一个SQL变量。因此,您试图将所有参数作为SQL_变量传递给SP,当其中一个参数无法转换时,您将收到此错误。请告诉我们您是如何从EF呼叫SP的?是的,我猜是这样的。你应该告诉我们你是如何给你的S.P.打电话的。不管怎样,很高兴你解决了这个问题。