Ошибка: Динамическое создание SQL для UpdateCommand не поддерживается против SelectCommand, которая не возвращает какой-либо ключевой информации столбцаMS ACCESS -Need для чтения и обновления
Я пытаюсь решить следующие проблемно получать мое приложение напишите обратно в мою базу данных. Приложение нажимает на заголовок исключения, указанный выше. Я читал о работе базы данных CRUD здесь http://www.homeandlearn.co.uk/NET/nets12p7.html
Я знаю из других чтений, что я сделал, что мне нужен первичный ключ. Может ли кто-нибудь объяснить, как это связано с использованием набора данных и адаптера данных? Эта ошибка связана с моей фактической базой данных или набором данных в памяти? Я также понимаю, что я создал набор данных, основанный на одном запросе. Нужен ли мне другой запрос (INSERT), когда я достигаю условия не найденного билета?
Private Sub BtnQuery_Click(sender As Object, e As EventArgs) Handles BtnQuery.Click
sql = "SELECT [Ticket ID] AS Ticket_ID , [Foundstone] AS Foundstone, [ID] AS ID FROM [Table MAIN] WHERE ([Ticket Days OverDue] >= 0)" 'define the query
da = New OleDb.OleDbDataAdapter(sql, con)
da.Fill(ds, "MAIN")
If ds.Tables("MAIN").Rows.Count > 0 Then
TxtRows.Text = ds.Tables("MAIN").Rows.Count
maxrows = Val(TxtRows.Text.ToString)
End If
For i = 0 To maxrows - 1
If i >= 0 Then
result = ds.Tables("MAIN").Rows(i).Item("Ticket_ID")
WebBrowser1.Navigate("https://fs-enterprise.my.private.url/remediation/ticket.exp?ticket=" & result)
Do While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete
Application.DoEvents()
Loop
WebBrowser1.AllowNavigation = True
'<div id="MessageGood_0" class="mvm-status-message msm-msg msm-msg-img" style="background-image:url(/images/fam/cross.png);">The specified ticket does not exist, or is not currently available.</div>
For Each el As HtmlElement In WebBrowser1.Document.GetElementsByTagName("div")
If (el.GetAttribute("id").Equals("MessageGood_0")) Then
TxtTicket.Text = ds.Tables("MAIN").Rows(i).Item("Ticket_ID")
'Try
Dim cb As New OleDb.OleDbCommandBuilder(da)
cb.QuotePrefix = "[" 'allows update if table name or field is a reserved word in MS Access
cb.QuoteSuffix = "]" 'allows update if table name or field is a reserved word in MS Access
ds.Tables("MAIN").Rows(i).Item("Foundstone") = "Not Found"
da.Update(ds, "MAIN")
da.UpdateCommand = cb.GetUpdateCommand()
MsgBox("Ticket Not Found")
'Catch ex As Exception
'MsgBox(ex.Message.ToString, , "Error")
'End Try
Else
'<input class="boldbutton" type="button" value="Verify" onclick="this.form.knob.value='ReqVerify';this.form.verify.value=1;this.form.submit()"></td>
TxtTicket.Text = ds.Tables("MAIN").Rows(i).Item("Ticket_ID")
For Each element As HtmlElement In WebBrowser1.Document.GetElementsByTagName("INPUT")
If (element.GetAttribute("value").Equals("Verify")) Then
element.InvokeMember("click")
End If
Next
End If
Next
End If
Next
MessageBox.Show("All Tickets Have Been Processed")
Me.Close()
con.Close()
End Sub
Первичный ключ должен быть установлен на таблицы базы данных, к которому вы обращаетесь ('main' в этом пример). Для добавления новой строки вам не нужен отдельный запрос. Вы можете добавить строку в свой набор данных в памяти, а затем обновить. – theduck
@ theduck. Спасибо, я понимаю, что основной ключ должен находиться в таблице, к которой я обращаюсь. Я пытаюсь прояснить этот вопрос в своем сознании. Установлен ли ключ в фактической базе данных или наборе данных (в представлении памяти в базе данных)? Мне не нужно добавлять дополнительные строки данных, а только писать обратно в столбец, который не имеет данных в уже существующей строке. –
Первичный ключ должен быть установлен в фактической таблице базы данных, а не в представлении памяти. Если вам не нужно добавлять новые строки, вы должны просто обновить набор данных и перенести изменения в базу данных. – theduck