0

我的老板要求我复制一个 MS Access 功能,我们在将产品迁移到 .NET 后不久就会失去该功能。

该功能是能够在表格网格中查看和更新​​数据库中的任何数据,尤其是表或视图。

我可以为具有标识列的纯表执行此操作,因为 SqlDataAdapter 可以动态自动生成相关的 CRUD 方法,以通过 DataTables 填充/更新。

但是,视图有些棘手。SQL Server Management Studio 确实允许这样做。如果您单击视图上的“编辑前 xx 行”,它允许您在看起来是标准的 .NET DataGridView 中编辑某些列中的数据 - 尽管感觉有点神奇。

所以,有几个问题:

SSMS 如何推断使用哪个主键,即使该键不在视图中?

SSMS 如何确定视图中的哪一列可以编辑/插入/删除等?

在 .NET 应用程序中复制它的最佳选择是什么?

是否可以将 DataGridView 连接到与数据库具有恒定直接连接的旧式 oledb / obdc 连接?

任何正常的指导将不胜感激。

马龙

4

1 回答 1

1

SQL Server 视图可以像单个表一样进行更新,只要它们符合某些条件。

文档中:

可更新视图

只要满足以下条件,就可以通过视图修改基础基表的数据:

任何修改,包括 UPDATE、INSERT 和 DELETE 语句,都必须仅引用一个基表中的列。

视图中被修改的列必须直接引用表列中的基础数据。这些列不能以任何其他方式派生,例如通过以下方式:

聚合函数:AVG、COUNT、SUM、MIN、MAX、GROUPING、STDEV、STDEVP、VAR 和 VARP。

一个计算。无法从使用其他列的表达式计算该列。使用集合运算符 UNION、UNION ALL、CROSSJOIN、EXCEPT 和 INTERSECT 形成的列相当于计算并且也不可更新。

正在修改的列不受 GROUP BY、HAVING 或 DISTINCT 子句的影响。

TOP 不与 WITH CHECK OPTION 子句一起在视图的 select_statement 中的任何地方使用。

前面的限制适用于视图的 FROM 子句中的任何子查询,就像它们适用于视图本身一样。通常,数据库引擎必须能够明确地跟踪从视图定义到一个基表的修改。有关详细信息,请参阅通过视图修改数据。

我不相信 SSMS 有什么特别之处——编辑视图内容提供的功能与编辑表格内容完全相同。如果用户尝试进行不符合上述条件的更改,SSMS 可能会显示错误。

SSMS 如何推断使用哪个主键,即使该键不在视图中?

它没有。SQL Server 这样做是因为一次只能编辑一个基础表。

SSMS 如何确定视图中的哪一列可以编辑/插入/删除等?

同样,决定这一点的是 SQL Server,而不是 SSMS。

在 .NET 应用程序中复制它的最佳选择是什么?

只要您的所有视图都符合上述条件,只需执行与表相同的操作,但要准备好处理用户做他们不能做的事情的错误(这意味着需要一些用户培训,只是就像他们直接使用 SSMS 一样)。

于 2012-05-24T15:32:35.100 回答