为数据集选择记录的策略

问题描述 投票:0回答:1

[在大多数情况下,数据库中有两个表(&更多)分别称为主表(例如SalesOrderHeader)和手卷(例如SalesOrderDetail)。我们可以通过one selectINNER JOIN和附加内容WHERE从DB中读取记录,以减少要从DB装载的卷数据(使用"Addater.Fill(DataSet)"

@"SELECT d.SalesOrderID, d.SalesOrderDetailID, d.OrderQty,
d.ProductID, d.UnitPrice
FROM Sales.SalesOrderDetail d
INNER JOIN Sales.SalesOrderHeader h
ON d.SalesOrderID = h.SalesOrderID
WHERE DATEPART(YEAR, OrderDate) = @year;"

我理解的正确,在这种情况下,我们在DataSet中收到一个表,没有主键和外键,也没有在主表和子表之间设置约束的可能性。

此数据集仅可用于有关数据集中存在的有关列和记录的不同查询?我们不能基于填充数据集的SelectCommand使用DbCommandBuilder创建用于插入,更新,删除的SQLCommand吗?并简单地更新数据库中这些表中的数据?

如果要通过使用ADO.NET的断开连接层在表中组织本地数据修改,则必须通过two Select填充DataSet。>

"SELECT *
FROM Sales.SalesOrderHeader;"
"SELECT *
FROM Sales.SalesOrderDetail;"

之后,我们必须为两个表都创建主键,并在主表和子表之间设置约束。通过DbCommandBuilder创建用于插入,更新,删除的SQLCommand。

在这种情况下,我们可以远程更新这些表中的任何修改数据,并且可以在DB中的更新记录之后使用"Addater.Update(DataSet)"

如果要使用一个SelectCommand在DataSet的两个表中加载数据,可以将SelectCommandDbCommandBuilder用作创建“ Update”的其他SQLCommand并将DataSet中的所有表更新一个"Addater.Update(DataSet)"或我们必须创建单独的Addapter来更新每个表吗?

如果我是出于经济考虑,则资源将仅加载表(例如SalesOrderDetail)中的部分记录(请参见下文)。我是否正确理解,在这种情况下,当我将新记录发送到数据库(通过更新)时,我可能会遇到问题,因为新闻记录可能与主键存在于数据库中(某些记录具有其他价值)冲突。 OrderDate字段)?

"SELECT *
FROM Sales.SalesOrderDetail
WHERE DATEPART(YEAR, OrderDate) = @year;"

[在最常见的情况下,数据库中有两个表(&更多)分别称为主表(例如SalesOrderHeader)和手卷(例如SalesOrderDetail)。我们可以使用INNER JOIN和...

ado.net dataset adapter selectcommand
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.