VB.Net TableAdapter не обновляет таблицу базы данных SQL Server - PullRequest
0 голосов
/ 01 октября 2019

vb.net tableadapter не обновляет таблицу базы данных.

Если я сделаю это еще раз, ожидая других результатов, им придется отвлечь меня.

Система:

  • Windows 8.1 64-битная
  • SQL Server 12 32-битная
  • SSMS 17
  • Visual Studio 2017
  • Visual Basic 2017

Фон:

Приложение имеет:

  • Form1
  • Определено CompanyDataDataSet
  • База данных: CompanyData

  • Таблица: CustomerData

  • Столбцы: последний, первый, возраст, день рождения, AutoId (уникальный столбец идентификатора и индексированный типBigInt);все столбцы имеют тип данных nvarchar(xx), за исключением AutoID
  • Все разрешения, установленные для функций вставки, обновления и удаления для базы данных и таблицы

  • Определен CusomerDataBindingSource

  • Источник данных: ComapnyDataDataSet
  • Определено CompanyDataTableAdapter

  • Определено BindingNavigator1

  • BindingSource: CompanyDataBindingSource

  • Элемент: BindingNavigatorSaveItem (несколько других, но только сосредоточены на обновлении таблицы)

  • DataGridView: Имя: dgvRaw
  • DataSource: CustomerDataBindingSource
  • DataGridView: имя: dgvProcessed
  • Источник данных: CustomerDataBindingSouce

  • Кнопка: получить записи

  • Текстовое поле: тег txtLast DataBindings CustomerDataBindingSource - последний
  • TextBox: тег txtfirst Databindings CustomerDataBindingSource - первый
  • TextBox: txtAge Тег DataBindingsCustomerDataBindingSource - age
  • TextBox: txtBirthday Тег привязки данных CustomerDataBindingSource - день рождения
  • TextBox: txtAutoID (только для чтения) Тег CustomerDataBindingSource = AutoID

Загрузка формы без проблем

Form1 Image

При вводе фамилии в текстовом поле txtLast и нажатии кнопок «Получить записи» выполняется следующий код:

Private Sub btnGetRecords_Click(sender As Object, e As EventArgs) Handles btnGetRecords.Click
        If Me.txtFirst.Text = "" And Me.txtLast.Text = "" Then
            MsgBox("You must enter a First Name and/or Last Name")
            Exit Sub
        End If
        ''''''''''''''''''''''''''''''''''' enter selectcommand string build
        Dim stFirst As String = Trim(Me.txtFirst.Text)
        Dim stLast As String = Trim(Me.txtLast.Text)
        Dim MyEcho = New Echo.Class1
        ' Build a string containing WHERE criteria (without the WHERE) 
        Dim stWhere As String = ""
        Dim corLast As String
        Dim corFirst As String
        If stFirst <> "" Then
            stWhere = "first Like '" & txtFirst.Text & "%'" & " And "
        End If

        corFirst = MyEcho.CorMe(txtFirst.Text)
        corLast = MyEcho.CorMe(txtLast.Text)

        If stLast <> "" Then
            stWhere = stWhere & " " & "last like '" & txtLast.Text & "%'"
        Else
            stWhere = Replace(stWhere, " And ", "")
        End If
        If stWhere = "" Then
        Else
            Me.CustomerDataTableAdapter.Selectcommand.CommandText = "select * from customerdata where " & stWhere
            Me.CompanyDataDataSet.CustomerData.DefaultView.Sort = "Last, first"
            Me.CustomerDataTableAdapter.Fill(Me.CompanyDataDataSet.CustomerData)
            ' now fill rows and columns of dgvRaw 
            Dim i, j As Integer
            For i = 0 To Me.dgvEncrypt.Rows.Count - 2
                Me.dgvRaw.Rows(i).Cells("Agex").Value = MyEcho.UcorMe(Me.dgvProcessed.Rows(i).Cells("Agec").Value)
                Me.dgvRaw.Rows(i).Cells("Birthdayx").Value = MyEcho.UcorMe(Me.dgvProcessed.Rows(i).Cells("Birthdayc").Value)
                Me.dgvRaw.Rows(i).Cells("Lastx").Value = MyEcho.UcorMe(Me.dgvProcessed.Rows(i).Cells("Lastc").Value)
                Me.dgvRaw.Rows(i).Cells("Firstx").Value = MyEcho.UcorMe(Me.dgvProcessed.Rows(i).Cells("Firstc").Value)
                Me.dgvRaw.Rows(i).cells("AutoIDx").value = me.dgvProcessed.Row(i).Cells("AutoIDc").value)
            Next i
            Me.dgvRaw.Visible = True
        End If
    End Sub  

Этот код выполняется правильно, Выбирает любые записи со значением Last (name), например, «Jones», заполняет набор CompanyDataDataSet.CustomerData и загружает два объекта DataGridView

. Щелчок по любой строке сетки dgvRaw правильно заполняет текстовые поля, выполняющие следующий код:

   Private Sub dgvRaw_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgvRaw.CellContentClick
        Dim vlast As String
        Dim vfirst As String
        Dim vage As String
        Dim vbirthday As String
        Dim vautoid As String
        Dim value As Object = Me.dgvProcessed.Rows(e.RowIndex).Cells(e.ColumnIndex).Value
        Dim MyEcho As New Echo.Class1
        If IsDBNull(value) Then
            Me.txtLast.Text = "" ' blank if dbnull values
        Else
            vlast = MyEcho.UcorMe(Me.dgvProcessed.Rows(e.RowIndex).Cells("Lastc").Value)
            vfirst = MyEcho.UcorMe(Me.dgvProcessed.Rows(e.RowIndex).Cells("Firstc").Value)
            vage = MyEcho.UcorMe(Me.dgvProcessed.Rows(e.RowIndex).Cells("Agec").Value)
            vbirthday = MyEcho.UcorMe(Me.dgvProcessed.Rows(e.RowIndex).Cells("Birthdayc").Value)
            vautoid = Me.dgvProcessed.Rows(e.RowIndex).Cells("AutoIDc").Value
            Me.txtLast.Text = vlast
            Me.txtFirst.Text = vfirst
            Me.txtAge.Text = vage
            Me.txtBirthday.Text = vbirthday
            Me.txtAutoID.Text = vautoid
        End If
    End Sub  

Данные можно редактировать в любом из текстовых полей.

ОДНАКО, когда нажимается кнопка BindingNavigatorSaveItem, следующий код не может обновить таблицу CompanyData.CustomerData и истекает время ожидания

    Private Sub BindingNavigatorSaveItem_Click(sender As Object, e As EventArgs) Handles BindingNavigatorSaveItem.Click
        Me.Validate()
        Me.CustomerDataBindingSource.EndEdit()
        Me.CustomerDataTableAdapter.Updatecommand.CommandText = "UPDATE dbo.CustomerData set first = '" & txtFirst.Text & "',last =' " & txtLast.Text & "',birthday = ' " & txtBirthday.Text & "',age = '" & txtAge.Text & "' where autoid = " &  Convert.ToInt64(txtAutoID.Text)  
        Me.CustomerDataTableAdapter.Update(Me.CompanyDataDataSet.CustomerData)
    End Sub  

Me.CustomerDataTableAdapter.Update (Me.CompanyDataDataSet.CustomerDataSataICatamer)тайм-ауты без обновления таблицы базы данных

Я проверил UpdateCommand.CommandText и он выдает: UPDATE dbo.CustomerData set first = 'Roy', Last = 'Jones', birthday = '11 / 29 /1907 ', age =' 95 ', где AutoID = 50168

Этот оператор UPDATE работает в SSMS без ошибок

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...