'Procedure Has Too Many Arguments' 错误虽然我只有两个
'Procedure Has Too Many Arguments' Error Although I Have Only Two
我检查了与此问题相关的其他 post,但找不到任何答案。
我的酒店 api 有一个 post 操作方法,在酒店存储库中我有下面这个 CreateHotel 方法。我只输入了两个参数,存储过程中也有两个参数,但出现此错误:System.Data.SqlClient.SqlException (0x80131904): Procedure or function CreateHotel has too many arguments specified.
public async Task<Hotel> CreateHotel(Hotel hotel)
{
var sql = "CreateHotel";
var newHotel = new Hotel()
{
Name = hotel.Name,
City = hotel.City
};
using (var connection = new SqlConnection(CONNECTION_STRING))
{
return await connection
.QueryFirstAsync<Hotel>(sql, newHotel, commandType: CommandType.StoredProcedure);
}
}
这里是酒店实体,以备不时之需:
public class Hotel
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[StringLength(50)]
[Required]
public string Name { get; set; }
[StringLength(50)]
[Required]
public string City { get; set; }
}
这就是 CreateHotel SP:
CREATE PROCEDURE CreateHotel @Name CHAR(50), @City CHAR(50)
AS
INSERT INTO Hotels (Name, City)
OUTPUT inserted.*
VALUES (@Name, @City)
GO
我可以告诉你一件有趣的事情是 Name 在 'INSERT INTO Hotels (Name, City)' 中键入后会自动变灰。但是鼠标悬停时检测到是name栏
您知道错误的原因吗?
您的酒店实体有一个 ID 属性,它将自动初始化为 0,因此您将 3 个参数传递给 Dapper 和存储过程。
相反,您可以使用匿名参数来传递参数。
using (var connection = new SqlConnection(CONNECTION_STRING))
{
return await connection
.QueryFirstAsync<Hotel>(sql, new { Name = hotel.Name, City = hotel.City} , commandType: CommandType.StoredProcedure);
}
我检查了与此问题相关的其他 post,但找不到任何答案。
我的酒店 api 有一个 post 操作方法,在酒店存储库中我有下面这个 CreateHotel 方法。我只输入了两个参数,存储过程中也有两个参数,但出现此错误:System.Data.SqlClient.SqlException (0x80131904): Procedure or function CreateHotel has too many arguments specified.
public async Task<Hotel> CreateHotel(Hotel hotel)
{
var sql = "CreateHotel";
var newHotel = new Hotel()
{
Name = hotel.Name,
City = hotel.City
};
using (var connection = new SqlConnection(CONNECTION_STRING))
{
return await connection
.QueryFirstAsync<Hotel>(sql, newHotel, commandType: CommandType.StoredProcedure);
}
}
这里是酒店实体,以备不时之需:
public class Hotel
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[StringLength(50)]
[Required]
public string Name { get; set; }
[StringLength(50)]
[Required]
public string City { get; set; }
}
这就是 CreateHotel SP:
CREATE PROCEDURE CreateHotel @Name CHAR(50), @City CHAR(50)
AS
INSERT INTO Hotels (Name, City)
OUTPUT inserted.*
VALUES (@Name, @City)
GO
我可以告诉你一件有趣的事情是 Name 在 'INSERT INTO Hotels (Name, City)' 中键入后会自动变灰。但是鼠标悬停时检测到是name栏
您知道错误的原因吗?
您的酒店实体有一个 ID 属性,它将自动初始化为 0,因此您将 3 个参数传递给 Dapper 和存储过程。
相反,您可以使用匿名参数来传递参数。
using (var connection = new SqlConnection(CONNECTION_STRING))
{
return await connection
.QueryFirstAsync<Hotel>(sql, new { Name = hotel.Name, City = hotel.City} , commandType: CommandType.StoredProcedure);
}