C# 刷新强类型数据集

C# 刷新强类型数据集,c#,ado.net,dataset,strongly-typed-dataset,C#,Ado.net,Dataset,Strongly Typed Dataset,我有一个调用某些存储过程的强类型数据集。在一个例子中,我使用强类型数据集在数据库中添加了一些数据。数据被添加到数据库中,但由于某种原因,新数据没有显示 这让我相信,在添加新项后,我必须以某种方式刷新强类型数据集。我不确定应该在此处发布什么代码,但我将发布将元素添加到数据库的代码: var addBookAdapter = new QueriesTableAdapter(); addBookAdapter.AddBook(book.Name,book.Author,book

我有一个调用某些存储过程的强类型数据集。在一个例子中,我使用强类型数据集在数据库中添加了一些数据。数据被添加到数据库中,但由于某种原因,新数据没有显示

这让我相信,在添加新项后,我必须以某种方式刷新强类型数据集。我不确定应该在此处发布什么代码,但我将发布将元素添加到数据库的代码:

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)

正如我已经提到的,这是有效的。新项目被添加到数据库中,但它们不会显示。

如果数据库中的基础数据已更改,则将该信息加载到数据集中的唯一方法是手动加载。根据您的需要,您在这里有两个选择:

您可以放弃现有数据并从数据适配器重新填充数据集。 您可以加载数据集的第二个副本,并使用来引入任何更改。 您可以直接将新行添加到数据集中。 但是,当您使用强类型数据集时,目的是在添加新行时使用该对象,而不是通过表适配器将它们添加到数据库中。将新行添加到数据集中的表时,它将作为在内存中添加的行进行跟踪。然后,当您通过表适配器将该数据集的更改保存回数据库时,该数据集将调用表的任何适当InsertCommand或UpdateCommand。这样,数据库和数据集就同步了

按照他的顺序,使用类型化数据集的工作流通常有以下步骤。合并解决逻辑和处理冲突的方式可能会变得相当复杂,但基本思想是一样的:

dataAdapter.Filldataset 通过类型化数据行对类型化数据集进行更改 dataChanges=dataSet.GetChanges dataAdapeter.UpdatedataChanges dataSet.MergedataChanges dataSet.AcceptChanges
如果数据库中的基础数据已更改,则将该信息加载到数据集中的唯一方法是手动加载。根据您的需要,您在这里有两个选择:

您可以放弃现有数据并从数据适配器重新填充数据集。 您可以加载数据集的第二个副本,并使用来引入任何更改。 您可以直接将新行添加到数据集中。 但是,当您使用强类型数据集时,目的是在添加新行时使用该对象,而不是通过表适配器将它们添加到数据库中。将新行添加到数据集中的表时,它将作为在内存中添加的行进行跟踪。然后,当您通过表适配器将该数据集的更改保存回数据库时,该数据集将调用表的任何适当InsertCommand或UpdateCommand。这样,数据库和数据集就同步了

按照他的顺序,使用类型化数据集的工作流通常有以下步骤。合并解决逻辑和处理冲突的方式可能会变得相当复杂,但基本思想是一样的:

dataAdapter.Filldataset 通过类型化数据行对类型化数据集进行更改 dataChanges=dataSet.GetChanges dataAdapeter.UpdatedataChanges dataSet.MergedataChanges dataSet.AcceptChanges
要开始,只需在TA中配置更新查询以使用存储过程。然后编写代码将新行添加到数据集中,并在TA上调用update。根据您的情况,您可能需要也可能不需要Michael答案中的完整GetChanges工作流。如果您是ADO.Net新手,我会先尝试熟悉简单的方法。要开始,只需在TA中配置更新查询以使用您的存储过程。然后编写代码将新行添加到数据集中,并在TA上调用update。根据您的情况,您可能需要也可能不需要Michael答案中的完整GetChanges工作流。如果您是ADO.Net新手,我会先尝试熟悉简单的方法。