【发布时间】:2021-10-29 04:06:25
【问题描述】:
我的 sql 数据库上有一个存储过程,它需要一个参数,并使用该参数从视图返回数据。
我的存储过程:
create procedure find_student @id varchar(6)
as
begin
select name,lastname,birthday,email,phone,city,country,university,study_year from v_scholarship
where id = @id
end
我的 api 控制器:
[HttpGet]
public IHttpActionResult MyId(string id)
{
string config = ConfigurationManager.ConnectionStrings["mycon"].ConnectionString;
using (SqlConnection sqlcon = new SqlConnection(config))
{
SqlCommand cmd = new SqlCommand("find_student", sqlcon);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@id", id);
sqlcon.Open();
cmd.ExecuteNonQuery();
sqlcon.Close();
return Ok();
}
}
它不返回任何错误,它只是返回空白。我认为这是因为我没有在 return OK() 中包含任何内容,但我不知道将哪个属性放在这些括号中。谢谢。
编辑:
我尝试了所有的答案,然后我发现了别的东西。 将其留在这里,以供将来可能需要的人使用。
[HttpGet]
public IHttpActionResult MyId(string id)
{
schoolEntity = myenitity = new schoolEntity();
var result = myenitity.find_student(id).ToList();
return Ok(result);
}
感谢大家的时间、努力和耐心。我真的很感激。
【问题讨论】:
-
数据访问库是 ADO.NET,不是 EF 也不是 ASP.NET Web API。 EF 是一个 ORM,它使用 ADO.NET 来执行查询。至于您发布的代码,它的工作原理与编写的完全相同。
return Ok();返回一个空响应。该代码甚至使用了ExecuteNonQuery,这意味着查询不会返回任何结果。你想做什么?既然您使用了EF标签,为什么不实际使用实体框架呢?还是像 Dapperr 这样的微型 ORM? -
我尝试此代码的控制器位于 Web api 中。我想返回此方法在执行时将从数据库中获取的数据。完成后,应该以 xml 格式显示数据(据我所知,web api 中的数据只能以 xml/json 格式读取)。
-
并且
cmd.ExecuteNonQuery();不会在存储过程中返回查询的结果,并且您不会将返回的结果分配给任何变量。这段代码看起来太试探了。无论如何,使用普通的 ADO.Net 并不是最好的选择。使用 Dapper 从存储过程中获取数据几乎是微不足道的。我会探索这条路。 -
好吧,我可能在这里有很多错误和错误以及误解,因为我是这一切的新手。但是你能告诉我使用或不使用实体框架从 Web api 中的存储过程中获取实际数据的正确方法吗?
标签: c# .net sql-server stored-procedures ado.net