![](/img/trans.png)
[英]Call MySql stored procedure which take 2 parameters from asp.net core 2.2 web API controller
[英]How to call stored procedure with parameters asp.net on web api?
我的 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();
}
}
它不返回任何錯誤,它只返回blank 。 我認為這是因為我沒有在 return OK() 中包含任何內容,但我不知道將哪個屬性放入這些括號中。謝謝。
編輯:
我嘗試了所有的答案,然后我找到了別的東西。 把這個留在這里只是為了將來可能需要它的人。
[HttpGet]
public IHttpActionResult MyId(string id)
{
schoolEntity = myenitity = new schoolEntity();
var result = myenitity.find_student(id).ToList();
return Ok(result);
}
感謝大家的時間、努力和耐心。 對此,我真的非常感激。
問題的代碼不會檢索查詢的結果或向調用者返回任何內容。 事實上, ExecuteNonQuery
明確表示 SQL 命令不會返回任何結果。
即使這更改為使用ExecuteReader
生成結果,結果也必須映射到實際對象。
如果使用Dapper之類的庫在后台構造命令,執行它並映射結果,則可以簡化代碼:
using (SqlConnection sqlcon = new SqlConnection(config))
{
var student = sqlcon.Query("find_student", new {id = someId},
commandType: CommandType.StoredProcedure)
.SingleOrDefault();
return Ok(student);
}
就是這樣。 Dapper 負責根據需要打開和關閉連接。 在幕后,它創建了一個sp_executesql
調用,該調用調用按名稱傳遞參數的存儲過程。 在這種特殊情況下,結果作為實現IDictionary<string,object>
對象返回,因此它們可以序列化為 XML 或 JSON。
實際上,將響應序列化為 XML 或 JSON 是 ASP.NET Web API 的工作,而不是操作的工作。 Web API 會將響應序列化為調用者的Accept-Content-Type
標頭請求的任何格式。
將Dapper
與強類型結果類一起使用更為常見,例如Student
:
class Student
{
public string name {get;set;}
public string lastname {get;set;}
...
}
...
var students = sqlcon.Query<Student>("find_student_by_course",
new { course= "abc"},
commandType: CommandType.StoredProcedure);
foreach(var student in students)
{
...
}
要獲取數據,您需要加載數據讀取器和數據結構。 創建學生類
class Student
{
public string name {get;set;}
public string lastname {get;set;}
...
}
並替換
cmd.ExecuteNonQuery();
和
var studenList= new List<Student>();
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
var student=new Student();
student.name=reader["name"].ToString();
student.lastname=reader["lastname"].ToString();
... and so on
studentList.Add(student);
}
//Release resources
reader.Close();
conn.Close();
在這里,我使用 ADO.Net 實體框架通過我的數據庫(Microsoft SQL 服務器)進行連接,並創建了存儲過程“MemberShoppingCart”,它根據成員 ID 過濾記錄並返回特定成員訂購的產品。 在這里,我已將 memberId 作為參數傳遞給我的存儲過程。
public IHttpActionResult GetInvoiceDetailsById(int id)
{
try
{
Tbl_Members member = new Tbl_Members();
List<InvoiceDetails> cd = _unitofwork.GetRepositoryInstance<InvoiceDetails>().GetResultBySqlprocedure("MemberShoppingCart @memberId", new SqlParameter("memberId", System.Data.SqlDbType.Int) { Value = id }).ToList();
return Ok(cd);
}
catch
{
return StatusCode(HttpStatusCode.NoContent);
}
}
這是將參數傳遞給 ASP .NET Web API 中的存儲過程並獲取結果的類似方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.