kosinsky:После того как сформированны UpdateCommand/InsertCommand/DeleteCommand нужно делать
da.Update(DS, tblName)
AcceptChanges делает другую операцию, она помечает изменения в таблице как подтвержденные и стирает историю в памяти. По этому ее не нужно вызывать ДО Update
В принципе, у меня это есть, только я забыл его прописать в форум:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
UpdateDA(Me.DS, "DOVOBL", _daDovObl) 'последнее из аргументов - датаадаптер (применяю потому что вроде бы SqlCommandBuilder должен видеть строку запроса при подключении для заливки данных в датасет с помощью адаптера
End Sub
Public Sub UpdateDA(ByVal Ds As DataSet, ByVal tblName As String, ByVal da As SqlDataAdapter)
Using cnn As New SqlConnection(OpenCnn.ConnectionString) 'использую свою функцию коннекта
Dim bdr As New SqlCommandBuilder(da)
da.Update(Ds, tblName)
End Using
End Sub
Но все равно не проходит. Я думал (и думаю), что DataAdapter должен генерировать изменения в БД, кешированные датасетом, а командбилдер только генерирует логику обновления исходя из кешированных в датасете изменений. Я не прав?
Тоесть я считаю, что можно не задавать строк запросов, не перебирать построчно таблицу для внесения изменений, а оставить это адаптеру с билдером. Но похоже, я чего-то недопонимаю. На останове по последней комманде SqlDataAdapter.UpdateCommand = Nothing. А должно быть иначе? Тогда я сам должен указать строку запроса на обновление или это должен сделать билдер. Если я не прав, то объясните - почему. Если прав - то где ошибка?
Что-то (если чесно) SqlDataBuilder мне не очень нравиться. Не рекомендуют его использовать и профи (из-за непредсказуемости - http://sql.ru/forum/actualthread.aspx?tid=391459&hl=sqlcommandbuilder). Подскажите, как его можно не использовать, а работать исключительно с адаптером?
YURFACT+