sp_executesql - Procedure or function expects parameter which was not supplied

后端 未结 3 1843
后悔当初
后悔当初 2021-01-18 13:17

I am working with Entity Framework in C# and am having an issue which I have tracked down to the SQL statement being generated.

The stored procedure takes in a table

相关标签:
3条回答
  • 2021-01-18 13:50

    You're using sp_executesql to run the SQL text dbo.SaveResults. This T-SQL runs the procedure dbo.SaveResults with no parameters. Now you understand where that message comes from. What to do about it? Use EXEC:

    EXEC dbo.SaveResults @resultID = 1234, @positiveResults = @p3
    

    Or, nest the call:

    exec sp_executesql N'
    
        EXEC dbo.SaveResults @resultID = @resultID, @positiveResults = @positiveResults
    
    ',N'@resultID int, @positiveResults [PositiveTypes] READONLY',@resultID=1,@positiveResults=@p3
    

    I have indented to make it more clear. The 2nd variant is not useful as far as I can tell. Use the first one.

    0 讨论(0)
  • 2021-01-18 13:56

    You will have to specify the parameter mappings in your sql string for it to work. i.e in the C# code replace

    db.Database.SqlQuery<T>("EXEC dbo.SaveResults", resultId, positiveResults) 
    

    with

    db.Database.SqlQuery<T>("EXEC dbo.SaveResults @resultId=@resultId, @positiveResults=@positiveResults", resultId, positiveResults)
    

    It seems sp_executesql is unable to automatically associate the passed parameters to the expected parameters when executing a stored procedure unless the mappings are manually specified in the SQL string passed

    0 讨论(0)
  • 2021-01-18 14:11

    I had the same exact issue.

    Once you declare the command, you have to specify the command type

    SqlCommand cmd = new SqlCommand(@"sp_name", con);
    
    cmd.CommandType = CommandType.StoredProcedure;
    

    If you don't do this, .NET will generate a command for using sp_executesql... and that is the problem is ... you specify the command type as above and the code generated is using

    execute storedprocedure @param1 = ...
    
    0 讨论(0)
提交回复
热议问题