Member 14914813 Ответов: 2

Как я должен решить "system.data.oledb.oledbexception: 'нет значения для одного или нескольких требуемых параметров"?


Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.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 PictureBox7_Click

            End If

        Next
        Dim stSQL As String
        stSQL = "SELECT BookingID, Customer, Set FROM tblBOokings"

        Dim stConString As String
        stConString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\kalea\Documents\Access Database\BookingSystem.accdb"

        Dim conBookings As OleDbConnection
        conBookings = New OleDbConnection
        conBookings.ConnectionString = stConString
        conBookings.Open()

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


        'Dim cmdSelectBookings As New As New OleDbCommand(stSQL, conBookings)

        Dim dsBookings As New DataSet
        Dim daBookings As New OleDbDataAdapter(cmdSelectBookings)
        daBookings.Fill(dsBookings, "Bookings")
        conBookings.Close()


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

Я получаю эту ошибку в:

daBookings.Заполнение(dsBookings, "бронирование")

Интересно, может ли кто-нибудь понять это?

2 Ответов

Рейтинг:
1

Sandeep Mewara

Цитата:

Как я должен решить "system.data.oledb.oledbexception: 'нет значения для одного или нескольких требуемых параметров"?

Ошибка выглядит здесь объяснительно: используемый вами запрос не соответствует ожиданиям и должен быть правильно настроен.

Цитата:
stSQL = "выберите BookingID, Customer, Set из tblBOokings"

Глядя на него, это жестко запрограммированный запрос, который вы используете. Первая мысль была о том, что чего-то не хватает в запросе при прохождении, но, похоже, у вас есть простой ванильный выбор. Но тогда кажется, что проблема может быть из-за того, что НАБОР КЛЮЧЕВЫХ СЛОВ[^] там. Возможно, вы определили столбец с именем "Set", но как только вы поместите его здесь в запрос как выполненный, он превратится в другое значение и может вызвать ошибку.

Измените имя столбца и попробуйте. Или быстрая проверка, выбрав все.
stSQL = "SELECT * FROM tblBOokings"

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


ОБНОВЛЕНИЕ:
Что бы я ни рассказывал выше, это должно привести к ошибке trow differet. Словесность его. Так что в случае, если вышеизложенное не решит проблему, вы все равно должны внести изменения.

Возможно, это из-за того, что вы пытаетесь заполнить набор данных непосредственно адаптером. Вместо этого вам нужно заполнить таблицу данных.

Попробуй:
Dim custTable As DataTable = New DataTable("Books")  
Dim dsBookings As New DataSet
dsBookings.Tables.Add(custTable) 
Dim daBookings As New OleDbDataAdapter(cmdSelectBookings)
daBookings.Fill(custTable, "Bookings") ' change made here from dataset to datatable
conBookings.Close()

Ссылаться: Объект oledbdataadapter.Метод Заполнения (System.Data.OleDb) | Microsoft Docs[^]


Sandeep Mewara

Обновлено с изменением от dataset к datatable, которое может быть его причиной.

Рейтинг:
1

OriginalGriff

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

SELECT BookingID, Customer, `Set` FROM tblBOokings