I am trying to use a stored procedure with multiple parameters but I keep getting a 500 response from my API. The stored procedure returns a string result and takes 3 varchar(30)
parameters.
Stored procedure call:
string Item1 = "123";
DateTime Item2 = DateTime.Now.AddDays(-3);
DateTime Item3 = DateTime.Now;
var result = await context.Set<string>().FromSqlInterpolated
($"EXECUTE proc @item1={Item1}, @item2={Item2.ToString()}, @item3={Item3.ToString()}")
.FirstOrDefaultAsync();
Any help would be greatly appreciated, thank you!
I am trying to use a stored procedure with multiple parameters but I keep getting a 500 response from my API. The stored procedure returns a string result and takes 3 varchar(30)
parameters.
Stored procedure call:
string Item1 = "123";
DateTime Item2 = DateTime.Now.AddDays(-3);
DateTime Item3 = DateTime.Now;
var result = await context.Set<string>().FromSqlInterpolated
($"EXECUTE proc @item1={Item1}, @item2={Item2.ToString()}, @item3={Item3.ToString()}")
.FirstOrDefaultAsync();
Any help would be greatly appreciated, thank you!
For scalar results, you don't use the Set<>
function as it's not an entity set. Just use context.Database.SqlQuery<>
var result = await context.Database.SqlQuery<string>()
($"EXECUTE proc @item1={Item1}, @item2={Item2.ToString()}, @item3={Item3.ToString()}")
.FirstOrDefaultAsync();
Note that you should only do ToString
if the parameter is a string, otherwise pass the value as the correct data type directly.
This would work just fine if you were passing in numeric values, but you are passing in strings within a SQL statement for your varchar
arguments. Where are your quotation marks?
string Item1 = "123";
DateTime Item2 = DateTime.Now.AddDays(-3);
DateTime Item3 = DateTime.Now;
var result = await context.Set<string>().FromSqlInterpolated
($"EXECUTE proc @item1='{Item1}', @item2='{Item2.ToString()}', @item3='{Item3.ToString()}'")
.FirstOrDefaultAsync();