问题描述
我有这个存储过程:
CREATE PROCEDURE AddReserv
@Place int,@StartDate datetime,@EndDate datetime
AS
BEGIN
INSERT INTO [dbo].Reserv(UserId,Place,StartDate,EndDate)
VALUES (1,@Place,@StartDate,@EndDate)
END
从post方法的控制器中,我想向表中添加新记录。我不知道如何将参数传递给存储过程。
我在控制器中的代码:
// POST: api/CreateReserv
[HttpPost]
public void Post(string value)
{
using (var connection = _db.Database.GetDbConnection())
{
connection.Open();
using (var command = connection.CreateCommand())
{
command.CommandType = System.Data.CommandType.StoredProcedure;
command.CommandText = "AddReserv";
//How to add params?
/*
@Place int
@StartDate datetime
@EndDate datetime
*/
command.ExecuteNonQuery();
}
}
}
解决方法
您可以使用command.Parameters.Add
添加参数,如下所示。
请确保您已安装NuGet
软件包System.Data.SqlClient
。
using (var command = connection.CreateCommand())
{
command.CommandType = System.Data.CommandType.StoredProcedure;
command.CommandText = "AddReserv";
command.Parameters.Add("@Place",SqlDbType.Int).Value = place;
command.Parameters.Add("@StartDate",SqlDbType.DateTime).Value = startDate;
command.Parameters.Add("@EndDate",SqlDbType.DateTime).Value = endDate;
command.ExecuteNonQuery();
}
,
用@Karan的一些代码更新了我的答案(应该是正确的答案)
....
using var connection = _db.Database.GetDbConnection();
connection.Open();
using var command = new SqlCommand("AddReserv",connection)
{
CommandType = CommandType.StoredProcedure
};
command.Parameters.Add("@Place",SqlDbType.Int).Value = place;
command.Parameters.Add("@StartDate",SqlDbType.DateTime).Value = startDate;
command.Parameters.Add("@EndDate",SqlDbType.DateTime).Value = endDate;
command.ExecuteNonQuery();
进一步的改进将是使用异步版本的代码。注意:代码编写完成后,如果发布JSON,请不要忘记[FromBody](有关更多信息,请访问https://stackoverflow.com/a/63349923/14072498)。
[HttpPost]
public async Task<IActionResult> Post(string value)
{
await using var connection = _db.Database.GetDbConnection();
await connection.OpenAsync();
await using var command = new SqlCommand("AddReserv",SqlDbType.DateTime).Value = endDate;
await command.ExecuteNonQueryAsync();
....
}
不确定_db是什么类型,如果
_db.Database.GetDbConnection()
有一个异步版本,也要使用它。