#c# #asp.net #asp.net-mvc
Вопрос:
Я просматривал примеры редактирования данных в базе данных, и я продолжаю находить этот код:
var std = studentList.Where(s => s.StudentId == Id).FirstOrDefault();
Мне было интересно, как я могу использовать этот код на СВОЕМ веб-сайте, потому что я использовал другой метод.
Основная часть этого вопроса-это часть РЕДАКТИРОВАНИЯ, я не знаю, как преобразовать приведенный выше пример в мое редактирование. Я действительно не могу понять, что такое «Список студентов» в моем коде.
Кроме того, это ссылка, по которой я следую: https://www.tutorialsteacher.com/mvc/create-edit-view-in-asp.net-mvc
namespace hdsportal.Pages
{
public class HomeController : Controller
{
SqlCommand com = new SqlCommand();
SqlDataReader dr;
SqlConnection con = new SqlConnection();
List<GestaoAlertas> addresses = new List<GestaoAlertas>();
List<GestaoUtilizadores> addresses2 = new List<GestaoUtilizadores>();
private readonly ILogger<HomeController> _logger;
public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
con.ConnectionString = "secret";
}
public IActionResult Gestao_Alertas()
{
FetchData();
return View(addresses);
}
public IActionResult Gestao_Utilizadores()
{
FetchData2();
return View(addresses2);
}
[Route("")]
public IActionResult Index()
{
FetchData();
return View(addresses);
}
public IActionResult Edit(int ID = 0)
{
GestaoAlertas _teste = addresses.FirstOrDefault(x => x.ID == ID);
return View(_teste);
}
public IActionResult Privacidade()
{
return View();
}
public IActionResult Contatos()
{
return View();
}
public IActionResult QuemSomos()
{
return View();
}
private void FetchData()
{
if (addresses.Count > 0)
{
addresses.Clear();
}
try
{
con.Open();
com.Connection = con;
com.CommandText = "SELECT [ID], [SYSTEM_NAME], [SYSTEM_STATUS], [SYSTEM_SHORTMSG] FROM [CORE_SYS_STATUS]";
dr = com.ExecuteReader();
while (dr.Read())
{
addresses.Add(new GestaoAlertas()
{
ID = (int)dr["ID"]
,
SYSTEM_NAME = dr["SYSTEM_NAME"].ToString()
,
SYSTEM_STATUS = dr["SYSTEM_STATUS"].ToString()
,
SYSTEM_SHORTMSG = dr["SYSTEM_SHORTMSG"].ToString()
});
}
con.Close();
}
//Mostra o erro se houver um
catch (Exception ex)
{
throw ex;
}
}
private void FetchData2()
{
//Reinicia a varíavel addresses se já conter algo
if (addresses2.Count > 0)
{
addresses2.Clear();
}
try
{
con.Open();
com.Connection = con;
com.CommandText = "SELECT [NumMec], [NomeCompleto], [Activo] FROM [CORE_USERS] WHERE [Activo] = 1 ";
dr = com.ExecuteReader();
while (dr.Read())
{
//Lê os dados da base de dados
addresses2.Add(new GestaoUtilizadores()
{
NumMec = dr["NumMec"].ToString()
,
NomeCompleto = dr["NomeCompleto"].ToString()
,
Activo = dr["Activo"].ToString()
});
}
con.Close();
}
catch (Exception ex)
{
throw ex;
}
}
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
}
}
Комментарии:
1. В этом комментарии,
studentList
вероятно, объект Entitiy Framework, представляющий таблицу базы данных. Таким образом, в основном в этой строке будет указана точная запись в таблице, которую необходимо обновить. Предполагая, что вы находитесь в процессе отправки данных, затем вы зададите свойства объекта в соответствии с данными, представленными в форме, и сохраните изменения. Это EF-эквивалент выполнения запроса на обновление в SQL. Но вы, кажется, используете ADO.NET а не EF, так что, возможно, это не имеет к вам отношения.2. Вероятно, вам следует изучить различные подходы, затем выбрать тот, который вам больше всего нравится, и следовать некоторым руководствам по этому подходу. Если вы хотите сделать raw ADO.NET как ты это делаешь, все в порядке. Вы также можете изучить микро-ORM, такие как Dapper , или полноценную ORM, такую как Entity Framework, ядро Entity Framework или NHibernate. Следуя инструкциям, убедитесь, что они предназначены для выбранной вами библиотеки.
3. Примечание, у вас
throw ex;
в кодеex
есть исключение, которое вы поймали. Это приводит к потере трассировки стека и делает отладку намного более болезненной. Чтобы сохранить трассировку стека, вы можете простоthrow;
. Однако, поскольку вы не делаете ничего значимого в своем блоке catch, вы можете также удалить всю эту попытку/уловку. Это просто добавляет визуальный беспорядок в ваш код.