我在Sql Server 2017中有一个存储过程,它需要三个参数。
CREATE PROCEDURE UpdateRestaurantInformation
@restaurantId nvarchar(max),
@restaurantName nvarchar(max),
@locationId int
AS
BEGIN
UPDATE Restaurants
SET RestaurantName = @restaurantName, LocationId = @locationId
WHERE RestaurantId = @restaurantId;
SELECT * FROM Restaurants WHERE RestaurantId = @restaurantId;
END
当我使用下面的代码片段尝试执行此存储过程时,它按预期工作。
SqlParameter param1 = new SqlParameter("@p0",restaurant.RestaurantId);
SqlParameter param2 = new SqlParameter("@p1", restaurant.RestaurantName);
SqlParameter param3 = new SqlParameter("@p2", restaurant.Location.LocationId);
var res = _context.Restaurants
.FromSqlRaw("UpdateRestaurantInformation @p0,@p1,@p2", param1, param2, param3)
.ToList();
但是当我尝试像下面这样使用FromSqlInterpolated时:
var res = await _context.Restaurants
.FromSqlInterpolated(
$"UpdateRestaurantInformation {restaurant.RestaurantId}, {restaurant.RestaurantName}, {restaurant.Location.LocationId}")
.SingleAsync();
它抛出了这个异常:
SqlException:'@ p0'附近语法不正确。 Microsoft.Data.SqlClient.SqlCommand+<>c.b__164_0(Task result)
我在哪里犯错了?请有人帮帮我。
.SingleAsync()
替换为.ToListAsync()
。 - Ivan Stoev