Antwan Gibbs Ответов: 1

Проект плацкарты глаг


Привет ребята Итак у меня есть этот проект который я строю для программы бронирования мест в кинотеатре используя vb.net и доступ к базе данных.Я использую pictureboxes в качестве своих мест ,а также у меня есть номера строк и столбцов, поэтому я хочу, чтобы при нажатии на picturebox он автоматически показывал номер места и номер строки, а также забронированные места при перезагрузке формы, но пока код меняется только на изображения, которые у меня есть код, когда он забронирован, и ничего не идет в базу данных, чтобы показать забронированные места .Мне нужна ваша помощь, ребята.Взгляните на мой vb-код.

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

Imports System.Data.OleDb
Public Class Form1

    Dim availableicon As New System.Drawing.Bitmap(My.Resources.available)
    Dim provisionalicon As New System.Drawing.Bitmap(My.Resources.provisional)
    Dim bookedicon As New System.Drawing.Bitmap(My.Resources.booked)


    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim c As Control

        For Each c In Me.Controls
            If TypeOf (c) Is PictureBox Then
                CType(c, PictureBox).Image = availableicon
                AddHandler c.Click, AddressOf A10_Click
            End If
            Dim stSQL As String
            stSQL = "SELECT BookingID,CustomerID,seat From Bookings"

            Dim ConnectionString As String
            ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\West\Desktop\TMS\TicketBooking.accdb"

            Dim conBookings As OleDbConnection

            conBookings = New OleDbConnection
            conBookings.ConnectionString = ConnectionString
            conBookings.Open()

            Dim cmdSelectBookings As OleDbCommand
            cmdSelectBookings = New OleDbCommand
            cmdSelectBookings.CommandText = stSQL
            cmdSelectBookings.Connection = conBookings

            Dim databaseBookings As New DataSet
            Dim databookings As New OleDbDataAdapter(cmdSelectBookings)
            databookings.Fill(databaseBookings, "Bookings")
            conBookings.Close()

            'MessageBox.Show(databaseBookings.Tables("Bookings").Rows.Count)

           
        Next
        Call UpdateBookings()
    End Sub
        Sub UpdateBookings()
        Dim stSQL As String
        stSQL = "SELECT BookingID,CustomerID,seat From Bookings"

        Dim ConnectionString As String
        ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\ West\Desktop\TMS\TicketBooking.accdb"

        Dim conBookings As OleDbConnection

        conBookings = New OleDbConnection
        conBookings.ConnectionString = ConnectionString
        conBookings.Open()

        Dim cmdSelectBookings As OleDbCommand
        cmdSelectBookings = New OleDbCommand
        cmdSelectBookings.CommandText = stSQL
        cmdSelectBookings.Connection = conBookings

        Dim databaseBookings As New DataSet
        Dim databookings As New OleDbDataAdapter(cmdSelectBookings)
        databookings.Fill(databaseBookings, "Bookings")
        conBookings.Close()
    End Sub




    Private Sub picturebox10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        If CType(sender, PictureBox).Image Is availableicon Then
            CType(sender, PictureBox).Image = provisionalicon
        ElseIf CType(sender, PictureBox).Image Is provisionalicon Then
            CType(sender, PictureBox).Image = bookedicon




        End If
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btncontinue.Click
        Dim c As Control
        Dim bselected As Boolean
        For Each c In Me.Controls
            If TypeOf (c) Is PictureBox Then
                If CType(c, PictureBox).Image Is provisionalicon Then
                    bselected = True
                    Exit For
                End If

            End If
        Next
        If bselected = False Then
            MessageBox.Show("please select at least one seat to book")
            Exit Sub
        End If

        Dim stSQLInsert As String
        stSQLInsert = "INSERT INTO Bookings(SEATID,ROW,NUMBER)"
        Dim ConnectionString As String
        ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\West\Desktop\TMS\TicketBooking.accdb"

        Dim conBookings As OleDbConnection

        conBookings = New OleDbConnection
        conBookings.ConnectionString = ConnectionString
        conBookings.Open()

        Dim cmdSelectBookings As OleDbCommand
        cmdSelectBookings = New OleDbCommand
        cmdSelectBookings.Connection = conBookings




        Dim iseatnum As Integer
        For Each c In Me.Controls
            If TypeOf (c) Is PictureBox Then
                If CType(c, PictureBox).Image Is provisionalicon Then
                    
                    stSQLInsert = "INSERT INTO Bookings(SEATID,ROW,NUMBER) VALUES('" & Me.txtcustomer.Text & "'," & iseatnum & ")"
                    cmdSelectBookings.CommandText = stSQLInsert
                    cmdSelectBookings.ExecuteNonQuery()
                End If
            End If
        Next
        conBookings.Close()

        Call UpdateBookings()

    End Sub
End Class

Richard Deeming

Вы заявляете о том, что iseatnum переменная, но вы никогда не устанавливаете ее ни на что. Вы закончите тем, что попытаетесь вставить 0 для каждого выбранного места.

Вы также передаете только два значения в поле VALUES предложение, но вы указали три столбца. Вы получите исключение, указывающее, что ваш синтаксис неверен.

1 Ответов

Рейтинг:
1

Patrice T

stSQLInsert = "INSERT INTO Bookings(SEATID,ROW,NUMBER) VALUES('" & Me.txtcustomer.Text & "'," & iseatnum & ")"

Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? - Обмен Стеками Информационной Безопасности[^]