Ответ на ваш вопрос будет очень сильно зависеть от технологии доступа к данным, которую вы используете для доступа к вашему SQL-серверу.Поскольку вы не сказали нам об этом, вот как это сделать, используя обычный ADO.NET:
public bool IsStudentExists(string id)
{
using (var conn = new SqlConnection("some connection string"))
using (var cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = "SELECT id FROM StudentTable WHERE id = @id";
cmd.Parameters.AddWithValue("@id", id);
using (var reader = cmd.ExecuteReader())
{
return reader.Read();
}
}
}
, а затем:
public ActionResult LookUpStudentId(string id)
{
if(!IsStudentExists(id))
{
return new RedirectResult("~/Error/NotFound");
}
return View();
}
Очевидно, что этот код доступа к данным лучше использоватьрефакторинг в репозитории, чтобы ваш контроллер не был тесно связан с используемой вами технологией доступа к данным.Так, например, вы бы определили IStudentsRepository
:
public interface IStudentsRepository
{
Student GetStudent(string id);
}
, который вы затем реализовали бы, и теперь действие вашего контроллера может работать с этой абстракцией:
public class StudentsController: Controller
{
private readonly IStudentsRepository _repository;
public StudentsController(IStudentsRepository repository)
{
_repository = repository;
}
public ActionResult LookUpStudentId(string id)
{
var student = _repository.GetStudent(id);
if(student == null)
{
return new RedirectResult("~/Error/NotFound");
}
return View(student);
}
}
Все, что осталось, это сконфигурируйте выбранную вами структуру DI для внедрения правильной реализации этого хранилища в контроллер.