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 без ошибок