Почему этот код доступа к базе данных не работает? vb.net

У меня есть доступ к базе данных со столбцами названия Keyи Usernameя пытаюсь установить некоторые данные обратно в Usernameстолбец первой строки базы данных. Но я получаю сообщение об ошибке:

Динамическая генерация SQL для UpdateCommand не поддерживается с помощью SelectCommand, которая не возвращает никакой информации о столбце.

Код:

 Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click
        Dim connection_string As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.UserAppDataPath & "DDL.mdb"
        Dim strSql As String = "SELECT Key,Username FROM table1"
        Dim dtb As New DataTable
        Dim command As New OleDbCommand
        'Dim dataset As DataSet
        Using cnn As New OleDbConnection(connection_string)
            cnn.Open()
            Using dad As New OleDbDataAdapter(strSql, cnn)
                dad.Fill(dtb)
                '/// send data from datatable to database
                Dim builder As OleDbCommandBuilder = New OleDbCommandBuilder(dad)


                command.Connection = cnn
                command.CommandText = "update * from table1"

                'set data
                dtb.Rows(0)("Username") = "PG"
                dad.Update(dtb)

            End Using
        End Using
    End Sub
End Class

EDIT: PS: я внес некоторые изменения в код, по-прежнему получает эту ошибку

vb.net,visual-studio-2012,

0

Ответов: 3


0 принят

У вас есть столбец с именем «Key», но действительно ли он является основным ключом для таблицы? Это то, чего он хочет.

Существует два варианта:

(1) У вас нет первичного ключа в таблице. Чтобы решить эту проблему, добавьте один или назначьте текущий столбец первичным ключом. Добавьте или измените первичный ключ таблицы в Access .

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

Причина в том, что когда он создает команду UPDATE, он использует первичный ключ, чтобы определить, какую строку обновлять. Когда он выполняет SELECT, он сначала выполняет дополнительный запрос, чтобы получить информацию о таблице, которая будет включать в себя какой столбец - первичный ключ; он использует эту информацию при создании команды UPDATE.


0

Вам необходимо предоставить DataAdapter команду Update. Вы можете сделать это вручную, установив свойство .UpdateCommand адаптера.

dad.UpdateCommand = "Update table1 Set...

Или вы можете использовать метод CommandBuilder. Это создаст команды для вас на основе вашего запроса Select. (Вставка, обновление, удаление)

Dim builder As OleDbCommandBuilder = New OleDbCommandBuilder(dad)

0

Попробуйте dtb.rows(0).item("Name")ввести имя в первой строке данных

Используйте DirectCast(dtb.rows(0).item("Name"),String)это значение как строку.

TextBox10.Text = DirectCast(dtb.rows(0).item("Name"),String)

Обратите внимание на Null-Values ??в базе данных. Они приведут к исключению в приведенном выше примере. Проверьте нулевые значения следующим образом:

If IsDBNull(dtb.rows(0).item("Name")) then
    TextBox10.Text = ""
Else
    TextBox10.Text = DirectCast(dtb.rows(0).item("Name"),String)
EndIf
vb.net, зрительно-студия-2012,
Похожие вопросы