Ошибка не может найти хранимую процедуру с Dapper и c # только когда я указываю commandType - PullRequest
0 голосов
/ 10 ноября 2018

Я использую Dapper с C # и SQL Server. У меня есть хранимая процедура в 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);

Я больше не получил ошибку, и игрок был вставлен в базу данных. Я не знаю, является ли это ожидаемым поведением, мне кажется странным. Есть ли какая-нибудь документация, которой я мог бы следовать?

EDIT:

Код хранимой процедуры:

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 голосов
/ 10 ноября 2018

Не указывайте параметры в тексте команды при использовании CommandType.StoredProcedure; укажите просто имя - параметры уже переданы по имени.

Если вам нужно отфильтровать свойства объекта, используйте проекцию:

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

SQL Server имеет неявное EXEC, если что-то выглядит достаточно близко к EXEC, поэтому другая версия работает. Так что, если вы предпочитаете: используйте это. С или без ведущей EXEC.

...