Reputation: 507
I'm using Dapper with C# and SQL Server. I have an stored procedure in SQL Server that inserts a person into my database. The problem is that when I specify in the query that its an stored procedure I get
Could not find stored procedure
but without using commandType
, everything works fine.
For example: I had the following code:
var result = connection.Execute("KBunnyGame_Players_InsertPlayer @Name, @Score, @FacebookId", player, commandType: CommandType.StoredProcedure);
And I kept getting the error, but after I changed to:
var result = connection.Execute("KBunnyGame_Players_InsertPlayer @Name, @Score, @FacebookId", player);
I didn't get the error anymore and the player got inserted in the database. I don't know if that's the expected behaviour, it seems weird to me. Is there any documentation I could follow?
EDIT:
Stored procedure code:
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
Upvotes: 7
Views: 4550
Reputation: 1062965
Don't specify the parameters in the command-text when using CommandType.StoredProcedure
; provide just the name - the parameters are passed by name already.
If you need to filter the properties on the object, use a projection:
var result = connection.Execute("KBunnyGame_Players_InsertPlayer",
new { player.Name, player.Score, player.FacebookId },
commandType: CommandType.StoredProcedure);
SQL Server has implicit EXEC
if something looks sufficiently close enough to an EXEC
, which is why the other version works. So if you prefer: use that. With or without a leading EXEC
.
Upvotes: 10