Member 10469183 Ответов: 2

Просмотр в datagrid всех данных из главной таблицы, где связь с другой таблицей в ms access используется в VB.NET


my problem in SQL query, result has been successful to load data in datagrid like SL_No (2,4,5) but some data are missing from table Pairing like (1,2,3,4,5,6) where relationship table data is not available like (1,3,6) in Receipt table.


Что я уже пробовал:

Private Sub BtnView_Click(sender As Object, e As EventArgs) Handles btnView.Click

    Dim Sql as String = "Select Pairing.Ledger_Index, Pairing.Fr_Customer_no, Pairing.Fr_Customer_nm, Receipt.Dt_Entry, Receipt.Price from Pairing INNER JOIN Receipt ON Pairing.Fr_Customer_no = Receipt.Sub_No WHERE (((Pairing.Ledger_Address)='" & cmbList.Text & "'))""

    If RdoLedger.Checked=True Then
       DatagridView_Load("sql",DatagridView1)
    End If

End Sub

Public Function DatagridView_Load(ByVal Sql As String, ByVal Model As DataGridView)
    Try
        If con.State = ConnectionState.Open Then
            con.Close()
        End If
        Model.DataSource = Nothing
        Dim da As New OleDbDataAdapter(Sql, con)
        Dim dt As New DataTable
        dt.Clear()
        da.Fill(dt)
        If IsDBNull(dt) = False Then
            Model.DataSource = (dt)
            con.Close()
        Else
            Model.DataSource = Nothing
            con.Close()
        End If

    Catch ex As Exception
        MsgBox("ERROR : " & ex.Message.ToString)
    End Try
    Return True
End Function

Richard Deeming

Dim Sql as String = "Select Pairing.Ledger_Index, Pairing.Fr_Customer_no, Pairing.Fr_Customer_nm, Receipt.Dt_Entry, Receipt.Price from Pairing INNER JOIN Receipt ON Pairing.Fr_Customer_no = Receipt.Sub_No WHERE (((Pairing.Ledger_Address)='" & cmbList.Text & "'))""

Не делай этого так!

Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.

Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]

Member 10469183

Сэр, пожалуйста, предложите этот запрос, как использовать SQL-инъекцию[^], pls examle по моему запросу. Спасибо.

2 Ответов

Рейтинг:
1

Richard Deeming

Один INNER JOIN будет возвращать только те строки, в которых есть совпадающая запись в обеих таблицах.

Это звучит так, как будто ты хочешь ... LEFT JOIN вместо.

Визуальное представление SQL-соединений[^]

Но серьезно, исправь это SQL-инъекция[^] уязвимость до того, как кто-то намеренно или случайно использует ее для уничтожения вашей базы данных!


Member 10469183

Спасибо за ответ, и я очень плохо разбираюсь в программировании, но я не знаю, что такое SQL-инъекция [^], я постараюсь понять это. Спасибо.

Рейтинг:
0

Member 10469183

Я бы хотел, чтобы все данные таблицы сопряжения, где не могут быть данные таблицы сопряжения, не совпадающие с таблицей recipt, но в результате данные столбца datagrid reciept должны быть равны нулю или недоступны.


Richard Deeming

Если вы хотите обновить свой вопрос, Нажмите зеленую ссылку "улучшить вопрос" и отредактируйте свой вопрос.

Не опубликуйте свое обновление как "решение".