2013-03-01 3 views
2

У меня есть строго типизированный набор данных, который вызывает некоторые хранимые процедуры. В одном случае я добавляю некоторые данные в базу данных с использованием строго типизированного набора данных. Данные добавляются в базу данных, но по какой-то причине новый данные не отображаются.Обновить сильно типизированный DataSet

Это заставляет меня поверить, что мне нужно как-то обновить строго типизированный набор данных после добавления нового элемента. Я не уверен, какой код я должен разместить здесь, но я отправлю код, который добавит элементы в базу данных:

var addBookAdapter = new QueriesTableAdapter();   

addBookAdapter.AddBook(book.Name,book.Author,book.Description,book.PublicationDate,book.CategoryId); 

Это хранимая процедура, которая делает это:

CREATE PROCEDURE [dbo].[AddBook] 
    @Name nvarchar(MAX), 
    @Author nvarchar(MAX), 
    @Description nvarchar(MAX), 
    @Date date , 
    @CategoryId int 
AS 
    INSERT INTO Books (Name , Author , Description , PublicationDate , CategoryId) 
    VALUES (@Name , @Author , @Description , @Date , @CategoryId) 

Как я уже говорил об этом works.The новый элемент добавляется в БД, но они не отображаются

ответ

3

Если базовые данные в вашей базе данных были изменены, единственный способ загрузить эту информацию в ваш набор данных - загрузить ее вручную. У вас есть несколько вариантов здесь, в зависимости от ваших потребностей:

  • Вы можете отменить существующие данные и повторно заполнить набор данных из вашего адаптера данных.
  • Вы можете загрузить вторую копию набора данных и использовать DataSet.Merge для внесения любых изменений.
  • Вы можете просто добавить новую строку в набор данных напрямую.

Однако, когда вы используете строго типизированные наборы данных, намерение для вас использовать этот объект при добавлении новых строк, не, чтобы добавить их в базу данных с помощью адаптера таблицы. Когда вы добавляете новую строку в таблицу в наборе данных, ее отслеживают как «добавленную» в памяти. Когда вы затем переходите к сохранению изменений из этого набора данных обратно в базу данных через ваш адаптер таблицы, набор данных будет вызывать все, что соответствует InsertCommand или UpdateCommand для таблиц. Таким образом, ваша база данных и набор данных синхронизируются.

Рабочий процесс для использования типизированных наборов данных обычно имеет следующие шаги в его порядке. Вы можете получить довольно сложный с логикой разрешения слияния и как обрабатывать конфликты, но основная идея та же:

  • dataAdapter.Fill(dataset)
  • (внести изменения в типизированного набора данных с помощью типизированных строк данных)
  • dataAdapeter.Update(dataChanges)
  • dataSet.Merge(dataChanges)
  • dataSet.AcceptChanges()
+0

Для начала просто настройте запрос обновления в TA, чтобы использовать хранимую процедуру. Затем напишите код, чтобы добавить новую строку в набор данных, и вызовите обновление в TA. В зависимости от ваших обстоятельств вы можете или не нуждаетесь в полном рабочем процессе GetChanges в ответе Майкла. Если вы новичок в ADO.Net, я сначала попробую познакомиться с простым подходом. – peterG

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