仅当我指定commandType时,使用Dapper和C#找不到错误的存储过程

时间:2018-11-09 22:57:50

标签: c# dapper

我在C#和SQL Server中使用Dapper。我在SQL Server中有一个存储过程,可将一个人插入数据库。问题是,当我在查询中指定其存储过程时,会得到

  

找不到存储过程

但不使用commandType,一切正常。

例如:我有以下代码:

var result = connection.Execute("KBunnyGame_Players_InsertPlayer @Name, @Score, @FacebookId", player, commandType: CommandType.StoredProcedure);

我一直收到错误消息,但是在我更改为:

var result = connection.Execute("KBunnyGame_Players_InsertPlayer @Name, @Score, @FacebookId", player);

我再也没有收到错误,播放器已插入数据库中。 我不知道这是否是预期的行为,对我来说似乎很奇怪。有什么我可以追踪的文件吗?

编辑:

存储过程代码:

ALTER PROCEDURE [dbo].[KBunnyGame_Players_InsertPlayer] 
    @Name NCHAR(20),
    @Score INT,
    @FacebookId NCHAR(50)
AS
BEGIN
    SET NOCOUNT ON;

    INSERT INTO KBunnyGame_Players (name, score, facebookId) 
    VALUES (@Name, @Score, @FacebookId); 
END

1 个答案:

答案 0 :(得分:2)

使用CommandType.StoredProcedure时,请不要在命令文本中指定参数;提供公正的名称-参数已按名称传递。

如果需要过滤对象的属性,请使用投影:

var result = connection.Execute("KBunnyGame_Players_InsertPlayer",
    new { player.Name, player.Score, player.FacebookId },
    commandType: CommandType.StoredProcedure);

如果某项看起来与EXEC足够近,则SQL Server具有隐式EXEC,这就是其他版本起作用的原因。因此,如果您愿意:使用它。有或没有前导EXEC