【问题标题】:Refresh a strongly typed DataSet刷新强类型数据集
【发布时间】:2013-02-16 03:11:49
【问题描述】:

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

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

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)

正如我已经提到的那样,新项目已添加到数据库中,但未显示

【问题讨论】:

    标签: c# ado.net dataset strongly-typed-dataset


    【解决方案1】:

    如果数据库中的基础数据发生了变化,将这些信息加载到数据集中的唯一方法是手动加载。根据您的需要,您有几个选择:

    • 您可以丢弃现有数据并从数据适配器重新填充数据集。
    • 您可以加载数据集的第二个副本并使用DataSet.Merge 进行任何更改。
    • 您可以直接将新行添加到数据集中。

    但是,当您使用强类型数据集时,目的是让您在添加新行时使用该对象,而不是通过表适配器将它们添加到数据库中。当您向数据集中的表添加新行时,它在内存中被跟踪为“已添加”。然后,当您通过表适配器将该数据集的更改保存回数据库时,数据集将调用适用于表的 InsertCommandUpdateCommand。这样,您的数据库和数据集就会同步。

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

    • dataAdapter.Fill(dataset)
    • (通过类型化数据行更改类型化数据集)
    • dataChanges = dataSet.GetChanges()
    • dataAdapeter.Update(dataChanges)
    • dataSet.Merge(dataChanges)
    • dataSet.AcceptChanges()

    【讨论】:

    • 要开始使用,只需在 TA 中配置更新查询以使用您的存储过程。然后编写代码将新行添加到数据集中,并在 TA 上调用更新。根据您的情况,您可能需要也可能不需要迈克尔回答中的完整 GetChanges 工作流程。如果您是 ADO.Net 的新手,我会先尝试熟悉这种简单的方法。
    猜你喜欢
    • 2011-07-10
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2011-01-22
    相关资源
    最近更新 更多