2013-03-01 60 views
2

我有一个强类型数据集调用一些存储procedures.In一个情况下,我在数据库中使用强类型数据set.The数据被添加到数据库,但由于某些原因,新添加一些数据数据未被显示。刷新一个强类型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中的任何变化带来。
  • 您可以只需添加新行插入到数据集直接。

但是,当你使用强类型数据集,目的是为你添加新行的时候,通过表适配器将它们添加到数据库中使用该对象。当您将新行添加到数据集中的表中时,它会在内存中被追踪为“已添加”。然后当您通过您的表适配器保存从数据集回数据库的变化,该数据集将调用一切适当的InsertCommandUpdateCommand是对表。这样,您的数据库和数据集就会同步。

使用类型化数据集通常有以下几个步骤,他为了工作流程。你可以得到相当复杂与合并决议的逻辑,以及如何处理冲突,但基本思路是一样的:

  • dataAdapter.Fill(dataset)
  • (请通过键入的数据行更改您的类型化的DataSet)
  • dataAdapeter.Update(dataChanges)
  • dataSet.Merge(dataChanges)
  • dataSet.AcceptChanges()
+0

要开始,只是在TA配置更新查询中使用存储过程。然后编写代码将新行添加到数据集,并在TA上调用更新。根据您的情况,您可能会也可能不需要迈克尔答案中的完整GetChanges工作流程。如果你是ADO.Net的新手,我会尝试先熟悉简单的方法。 – peterG 2013-03-03 16:38:53