C# 不允许从数据类型sql\U variant隐式转换为varchar
我在使用Dapper从.NET实体框架调用存储过程时遇到此错误 不允许从数据类型sql_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
@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.打电话的。不管怎样,很高兴你解决了这个问题。