我的老板已经要求我复制一个MS Access功能,在将我们的产品迁移到.NET后不久我们就会丢失这个功能。
该功能可以在表格网格中查看和更新数据库中的任何数据,尤其是表格或视图。
我可以为具有标识列的纯表执行此操作,因为SqlDataAdapter可以动态自动生成相关的CRUD方法,以通过DataTables填充/更新。
然而,观点有些棘手。 SQL Server Management Studio允许它。如果在视图上单击“编辑顶部xx行”,它允许您在一些看起来像标准.NET DataGridView的列中编辑数据 - 尽管感觉有点神奇。
所以,有几个问题:
SSMS如何推断使用哪个主键,即使该键不在视图中?
SSMS如何确定视图中的哪个列可以编辑/插入/删除等等?
在.NET应用程序中复制此内容的最佳选择是什么?
是否可以将DataGridView连接到与数据库具有持续直接连接的旧式oledb / obdc连接?
任何正常的指导都将受到高度赞赏。
马龙
答案 0 :(得分:1)
SQL Server视图可以更新,就像它们是单个表一样,只要它们符合某些条件。
可更新视图
您可以通过视图修改基础基表的数据,如 只要满足以下条件:
任何修改,包括UPDATE,INSERT和DELETE语句, 必须仅从一个基表引用列。
视图中要修改的列必须直接引用 表列中的基础数据。无法导出列 任何其他方式,例如通过以下方式:
聚合函数:AVG,COUNT,SUM,MIN,MAX,GROUPING,STDEV, STDEVP,VAR和VARP。
计算。无法从表达式计算列 使用其他列。使用set运算符形成的列 UNION,UNION ALL,CROSSJOIN,EXCEPT和INTERSECT等于a 计算,也不可更新。
正在修改的列不受GROUP BY,HAVING或的影响 DISTINCT条款。
TOP不会在视图的select_statement中的任何位置一起使用 使用WITH CHECK OPTION子句。
以前的限制适用于FROM子句中的任何子查询 视图,就像它们适用于视图本身一样。一般来说, 数据库引擎必须能够明确地跟踪修改 视图定义到一个基表。有关更多信息,请参阅 通过视图修改数据。
我不相信SSMS做任何特别的事情 - 编辑视图的内容提供与编辑表格内容完全相同的功能。如果用户尝试进行不符合上述条件的更改,SSMS可能会显示错误。
SSMS如何推断使用哪个主键,即使该键不在视图中?
没有。 SQL Server可以,因为一次只能编辑一个基础表。
SSMS如何确定视图中的哪个列可以编辑/插入/删除等等?
同样,SQL Server确定了这一点,而不是SSMS。
在.NET应用程序中复制此内容的最佳选择是什么?
只要您的所有观点都符合上述条件,只需按照您对表格执行的操作即可,但要做好处理来自用户做出他们无法做到的事情的错误(这意味着一些用户培训将是必要的,就像他们直接使用SSMS一样。)