.NET 在 SQL 视图中更新数据

本文关键字:更新 数据 视图 SQL NET | 更新日期: 2023-09-27 18:35:25

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

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

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

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

所以,有几个问题:

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

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

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

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

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

马龙

.NET 在 SQL 视图中更新数据

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

从文档中:

可更新的视图

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

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

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

聚合函数:平均值、计数、总和、最小值、最大值、分组、STDEV、 STDEVP、VAR 和 VARP。

计算。无法从以下表达式计算列: 使用其他列。使用集合运算符形成的列 并集、全部并集、交叉联接、例外和相交量为 计算,也不是可更新的。

正在修改的列不受 GROUP BY、HAVEING 或 不同的条款。

TOP 不会一起用于视图select_statement中的任何位置 与"选中选项"子句。

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

我不相信 SSMS 正在做任何特别的事情 - 编辑视图的内容提供与编辑表内容完全相同的功能。如果用户尝试进行不符合上述条件的更改,SSMS 可能会显示错误。

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

其实不然。SQL Server 之所以可以这样做,是因为一次只能编辑一个基础表。

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

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

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

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