Есть ли способ заполнить таблицу HTML из базы данных? (SQL-сервер, VB.NET, ASP.NET)

У меня есть базовая настройка HTML-таблицы на моем веб-портале ASP.NET:

<table ID = "MasterTable" width = "100%" style = "border: 1px solid gray;"> 
      <tr>
        <th style = "border: 1px solid gray;" width = "33%">
          Promo Master ID
        </th>
        <th style = "border: 1px solid gray;" width = "33%">
          Name
        </th>
        <th style = "border: 1px solid gray;" width = "33%">
          PLU
        </th>
      </tr>

ПРИМЕЧАНИЕ. Есть закрывающий тег таблицы, там был просто дополнительный код, не связанный с ним.

Мне было интересно, как я могу заполнить таблицу данными, сохраненными в базе данных SQL Server.

cmd = New SqlCommand("SELECT PromoMasterID, Description, PLU FROM PromoMaster")
cmd.Connection = conn

conn.Open()

Является ли то, что у меня есть для вызова, а PromoMasterID, Описание, PLU — это то, что я хочу в качестве столбцов, как я могу использовать это для заполнения таблицы?

Любая помощь будет оценена по достоинству, спасибо.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
86
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Что ж, вы можете заполнить HTML-таблицу, но здесь у вас есть «ох как» много лучших вариантов.

Однако, к вашему сведению, если вы пометите элемент управления (таблицу) с помощью runat="server", то код теперь сможет свободно манипулировать этим объектом таблицы HTML.

Следовательно, произнесите эту разметку:

     <table ID = "Hotels" runat = "server" 
        style = "width:30%" class = "table table-hover table-bordered table-striped" > 
      <tr>
        <th style = "border: 1px solid gray;" width = "33%">
          Hotel Name
        </th>
        <th style = "border: 1px solid gray;" width = "33%">
          Description
        </th>
      </tr>
    </table>

Итак, наш код может быть таким:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    If Not IsPostBack Then

        LoadTable

    End If

End Sub

Sub LoadTable()

    Dim strSQL =
        "SELECT HotelName, Description FROM tblHotels 
        ORDER BY HotelName"
    Dim dtHotels As DataTable = MyRst(strSQL)

    For Each OneRow As DataRow In dtHotels.Rows

        Dim NewRow As New HtmlTableRow()

        Dim HotelName As New HtmlTableCell()
        HotelName.InnerText = OneRow("HotelName").ToString

        Dim Description As New HtmlTableCell()
        Description.InnerText = OneRow("Description").ToString

        NewRow.Cells.Add(HotelName)
        NewRow.Cells.Add(Description)

        Hotels.Rows.Add(NewRow)

    Next

End Sub

И результат такой:

И обратите внимание на настройку класса для таблицы (это загрузочные классы, поэтому результирующая таблица выглядит довольно красиво).

Однако гораздо лучше использовать элемент управления GridView, поскольку он учитывает данные и в любом случае выходными данными будет таблица HTML.

Итак, вместо вышесказанного, используя GridView, мы имеем следующую разметку:

        <asp:GridView ID = "GHotels" runat = "server"
            style = "width:30%" CssClass = "table table-hover table-striped">
        </asp:GridView>

И наш код теперь становится таким:

Sub LoadTable()

    Dim strSQL =
        "SELECT HotelName, Description FROM tblHotelsA 
        ORDER BY HotelName"
    Dim dtHotels As DataTable = MyRst(strSQL)

    GHotels.DataSource = dtHotels
    GHotels.DataBind()


End Sub

Итак, обратите внимание, как мало кода требуется для приведенного выше примера. И даже обратите внимание, что нам не пришлось выписывать имена столбцов выше.

Результат вышесказанного таков:

Итак, разве вы не собираетесь писать всевозможный дополнительный код? Я не вижу особых причин использовать таблицу HTML в отличие от использования элемента управления, «осведомленного о данных», такого как GridView, который в конце дня все равно выведет действительную разметку таблицы HTML.

И чтобы завершить этот пост, я использовал удобную «вспомогательную» процедуру под названием MyRst, которую я поместил в модуль глобального кода (поскольку быстро устаешь снова и снова вводить код соединения и таблицы данных). Эта процедура просто возвращает таблицу данных.

Итак, MyRst это:

Public Function MyRst(strSQL As String) As DataTable

    ' general get any data from SQL

    Dim rstData As New DataTable
    Using conn As New SqlConnection(My.Settings.TEST4)
        Using cmdSQL As New SqlCommand(strSQL, conn)
            conn.Open()
            rstData.Load(cmdSQL.ExecuteReader)
            rstData.TableName = strSQL
        End Using
    End Using

    Return rstData

End Function

Конечно, если вы собираетесь вводить параметры в SQL, то я бы использовал MyRstP вот так:

    Dim strSQL =
        "SELECT * FROM tblHotels WHERE City = @City"

    Dim cmdSQL As New SqlCommand(strSQL)
    cmdSQL.Parameters.Add("@City", SqlDbType.NVarChar).Value = "Edmonton"

    Dim rstData As DataTable = MyRstP(cmdSQL)

Итак, MyRstP таков:

Public Function MyRst(strSQL As String) As DataTable

    ' general get any data from SQL command object
    Dim rstData As New DataTable
    Using conn As New SqlConnection(My.Settings.TEST4)
        Using cmdSQL As New SqlCommand(strSQL, conn)
            conn.Open()
            rstData.Load(cmdSQL.ExecuteReader)
            rstData.TableName = strSQL
        End Using
    End Using

    Return rstData

End Function

Итак, обратите внимание, что циклический код не требуется, и, таким образом, обратите внимание, что у нас очень мало строк разметки и очень мало строк кода. Следовательно, практически нет причин идти по этому пути, используя все виды дополнительного зацикленного кода и всевозможную дополнительную HTML-разметку.

Метод MyRst() заставит их писать код, который безумно уязвим для SQL-инъекций.

Joel Coehoorn 23.07.2024 20:18

Почему? Если нет параметров и пользовательского ввода, то с кодом все в порядке. Если требуются параметры, я использую MyRstP. Я опубликую копию этого в этом примере. - см. мое редактирование. Так что тут вообще ничего не поощряем....

Albert D. Kallal 23.07.2024 20:30

Однако, в качестве предупреждения, я все еще ОЧЕНЬ ценю это предложение и НЕ поощрять людей писать код внедрения SQL. Итак, я все равно благодарю вас за ваш комментарий, и, как видите, я не только согласен с вами, но и отредактировал пост. Хорошего дня!

Albert D. Kallal 23.07.2024 21:27

Другие вопросы по теме