[在大多数情况下,数据库中有两个表(&更多)分别称为主表(例如SalesOrderHeader
)和手卷(例如SalesOrderDetail
)。我们可以通过one select用INNER 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的两个表中加载数据,可以将SelectCommand
的DbCommandBuilder
用作创建“ Update”的其他SQLCommand并将DataSet中的所有表更新一个"Addater.Update(DataSet)"
或我们必须创建单独的Addapter来更新每个表吗?
如果我是出于经济考虑,则资源将仅加载表(例如SalesOrderDetail)中的部分记录(请参见下文)。我是否正确理解,在这种情况下,当我将新记录发送到数据库(通过更新)时,我可能会遇到问题,因为新闻记录可能与主键存在于数据库中(某些记录具有其他价值)冲突。 OrderDate
字段)?
"SELECT *
FROM Sales.SalesOrderDetail
WHERE DATEPART(YEAR, OrderDate) = @year;"
[在最常见的情况下,数据库中有两个表(&更多)分别称为主表(例如SalesOrderHeader)和手卷(例如SalesOrderDetail)。我们可以使用INNER JOIN和...