Жесткое кодирование строки SQLConnection в Razor .cshtml ::: Я не возражаю против более безопасного способа, если он есть - PullRequest
0 голосов
/ 02 июля 2019

Я отображаю данные на странице Razor Pages .NET Core 2.2.Это позволяет мне ссылаться на контекст моей базы данных только один раз и выдает ошибку, если я пытаюсь получить значение из другой таблицы.

Вот что работает во всем приложении каждый раз, когда я делаю что-то на основеtable.

  public class DetailsModel : PageModel
    {
        private readonly OESAC.Models.MyDbContext _context;

        public DetailsModel(OESAC.Models.MyDbContext context)
        {
            _context = context;
        }

        public OESAC.Models.Courses_New Courses_New { get; set; }


        public async Task<IActionResult> OnGetAsync(int? id)
        {
            ViewData["ThisID"] = id;

            if (id == null)
            {
                return NotFound();
            }

            Courses_New = await _context.Courses_New.FirstOrDefaultAsync(m => m.NewCourseTempID == id)

Ниже, когда я пытаюсь получить доступ к другой таблице внутри той же страницы / класса, я получаю подчеркнутое имя "DocsForThisCourseModel" и ошибку "Метод должен иметь тип возвращаемого значения":

private readonly OESAC.Models.MyDbContext _context;

public DocsForThisCourseModel(OESAC.Models.MyDbContext context)
{
    _context = context;
}

У меня такое чувство, что я могу изменить всю систему для использования контроллера и представления, но вместо этого я довольно хорошо разбираюсь в использовании System.Data.SqlClient, и я просто выполнил запрос, чтобы получить количество строккак это:

 using (SqlConnection con = new SqlConnection("Data Source=Txx\\SQL20xx4;Initial Catalog=xxx;User ID=xxx;Password=xxx;Persist Security Info=true"))
    {
        string sql = "SELECT Count(Course_NewID) As ExistingCourses FROM DocsForThisCourse WHERE Course_NewID =@id";


        SqlCommand cmd = new SqlCommand(sql, con);
        cmd.CommandType = CommandType.Text;

        cmd.Parameters.AddWithValue("@id", id);
        con.Open();
        int count = Convert.ToInt32(cmd.ExecuteScalar());
        con.Close();

            //HIDE "SEE DOCUMENTS" BUTTON BECAUSE THERE ARE NO DOCUMENTS
            if (count==0)
            {
                ViewData["HasDocs"] = "no";
            }
            else
            {
                ViewData["HasDocs"] = "yes";
            }
    }

Все это работает, и я делаю это в нескольких местах, так как страница Razor кажется ограниченной при попытке выполнить 2 запроса.Моя дилемма в том, что я не могу получить ссылку на DefaultConnection в моем файле appsettings.json.Поэтому я просто скопировал строку и использовал ее в коде, когда это необходимо.

Я пробовал это, но безрезультатно.

var connString = Configuration.GetConnectionString("DefaultConnection");

Полагаю, что когда-нибудь смогу получить строку подключенияот appsettings.json Я буду немного безопаснее, чем жестко его кодировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...