must declare the scalar variable '@custid' using dbcontext.Database.SqlQuery?

15,119

Solution 1

Since you're using named parameters, you have to specify the matching name for the parameter you're passing.

var results = _MiscContext.Database.SqlQuery<int>(
    "exec sp_GetStaff @custid",
    new SqlParameter("custid", customerNumber)).ToList<int>();

Solution 2

Try

var results = _MiscContext.Database.SqlQuery<int>(
              "exec sp_GetStaff {0}",
              customerNumber).ToList();
Share:
15,119
James123
Author by

James123

Updated on June 14, 2022

Comments

  • James123
    James123 almost 2 years

    I am trying to execute stored procedure from bcontext.Database.SqlQuery using EF5.

    It is throwing an error must declare the scalar variable '@custid'

      var results = _MiscContext.Database.SqlQuery<int>(
                  "exec sp_GetStaff @custid",
                  customerNumber).ToList<int>();
    

    SP returns 1 if customerNumber is staff otherwise it return empty row.

    ALTER PROCEDURE [dbo].[sp_GetStaff]
        @custid varchar(12)
    AS
    BEGIN
    
        SET NOCOUNT ON;
    SELECT 
    1 AS [C1]
    FROM  [dbo].[Staff] with (nolock)
    WHERE [CUSTOMER_ID] = @custid
    
    
    END
    

    How to manage this?

  • Edward Brey
    Edward Brey about 8 years
    This loses the performance and security benefits of a parameterized query.
  • Kinetic
    Kinetic about 2 years
    You are awesome, Microsoft are not, see here where they claim you can simply add the parameters docs.microsoft.com/en-us/ef/core/querying/raw-sql. Also, if you get a weird error when you try the above fix, check the namespaces used. See: stackoverflow.com/questions/22705767/…