Я новичок в ASP. NET, и у меня возникают проблемы с функцией API-контроллера. Я вызываю хранимую процедуру и отображаю результаты в модель, затем объединяю ее в список строк, но в конце кода она возвращает пустую строку. Я заметил, что выполнение пропускает блок while, и я не уверен почему, потому что когда я устанавливаю точки останова там, он не срабатывает.
это вывод хранимой процедуры, когда я запускаю в sqlserver
![enter image description here](https://i.stack.imgur.com/fix2U.jpg)
Это мой код:
UserModel
using System;
using System.ComponentModel.DataAnnotations;
namespace Fnk.Models{
public class UserModel{
[Required]
public string id {get; set;}
[Required]
public string Username{get; set;}
[Required]
public string Email {get; set;}
[Required]
public string UserRole {get; set;}
}
}
Api-контроллер - получает электронное письмо
public IActionResult getusers([FromRoute] string email){
string conn = Configuration.GetConnectionString("FintrakDBConnection");
var columns = new List<string>(); // List<string> pTypes;
using (var con = new SqlConnection(conn)) {
var cmd = new SqlCommand("scb_getUserRoles", con);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.CommandTimeout = 0;
cmd.Parameters.Add(new SqlParameter {
ParameterName = "email",
Value = email,
});
con.Open();
using(SqlDataReader reader = cmd.ExecuteReader()){ ///code works up to this point
while(reader.Read()){ // breakpoint here shows the 4 columns...
var obj = new UserModel();
if (reader["id"] != DBNull.Value)
obj.id = reader["id"].ToString();
if (reader["UserName"] != DBNull.Value)
obj.Username = reader["UserName"].ToString();
if (reader["Email"] != DBNull.Value)
obj.Email = reader["Email"].ToString();
if (reader["RoleId"] != DBNull.Value)
obj.UserRole = reader["RoleId"].ToString();
columns.Add(obj.id);
columns.Add(obj.Username);
columns.Add(obj.UserRole);
columns.Add(obj.Email);
}
reader.Close();
}
con.Close();
}
return Ok(columns.ToArray()); //returns an empty array.. dont know why
}
В этот момент while(reader.Read())
система показывает, что она прочитала базу данных и обновила считыватель, но выполнение пропускает время, пока l oop и возвращает пустой массив.
Пожалуйста, что я делаю не так?