2010-04-27 3 views
1

У меня возникли проблемы с обновлением моей базы данных из моего кода с помощью DataSet. Я использую SQL Server 2008 и Visual Studio 2008. Вот что я сделал до сих пор.Обновление базы данных из DataSet

Я создал таблицу в SQL Server под названием MyTable, которая имеет два столбца: id nchar (10) и имя nchar (50).

Затем я создал источник данных в своем проекте VB.net, который состоит из этой таблицы, используя мастер набора данных и назвал этот набор данных MyDataSet.

я запускаю следующий код на нажатие кнопки:

Try 
     Dim myDataSet As New MyDataSet 
     Dim newRow As MyDataSet.MyTableRow = myDataSet.MyTable.NewMyTableRow 
     newRow.BeginEdit() 
     newRow.id = "1" 
     newRow.name = "Alpha" 
     newRow.EndEdit() 
     myDataSet.MyTable.AddMyTableRow(newRow) 
     myDataSet.AcceptChanges() 
    Catch ex As Exception 
     MsgBox(ex.Message) 
    End Try 

, когда я запускаю это и проверять строки в SQL Server она возвращает 0 строк

Что я пропустил? Как я могу добавить эти строки/сохранить изменения в наборе данных в базу данных? Я видел другие примеры, которые используют TableAdapter, но я не думаю, что хочу это сделать, я думаю, что я смогу добиться этого, просто используя DataSet. Я ошибаюсь?

Помощь очень ценится!

ответ

3

Вы должны вызвать метод Update на вашем DataAdapter()

MyDataAdapter.Update(MyDataSet) 

Конечно, вы должны будете сделать DataAdapter или TableAdapter с необходимыми командами для записи изменений в базу данных.

DataSet - это «база данных» с памятью/отключением.

DataAdapter - это виджет, который взаимодействует с базой данных. Существуют разные DataAdapters для разных баз данных, для SQL Server используется SqlDataAdapter.

Вызов AcceptChanges помечает все ваши изменения как уже измененные, поэтому при обновлении базы данных вашим адаптером данных изменения не будут записываться в базу данных.

Если вы хотите сохранить данные в базе данных (путь ADO.NET), то вам необходимо будет использовать DataAdapter или TableAdapter. будет.

2

Не вызывайте AcceptChanges, который просто сбрасывает всю информацию отслеживания изменений на DataTable, чтобы указать, что строки являются текущими.

Сам по себе DataSet не взаимодействует с базой данных. Вам необходимо использовать надлежащий DataAdapter (в данном случае TableAdapter, который вы сказали, что не хотите использовать) и сохранить таблицу, позвонив по номеру Update.

+0

Я прокомментировал это, а затем выбрал Top 1000 строк на столе в SQL Server, и он все равно возвращает 0 строк. – ChrisAU

+1

@clawson: Я говорю, что вам нужно вызывать update * вместо * из acceptChanges', а не просто не вызывать 'AcceptChanges'. –

Смежные вопросы