我在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
答案 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
。