.NET在SQL视图中更新数据

时间:2012-05-24 15:29:06

标签: c# .net sql oledb ssms

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

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

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

然而,观点有些棘手。 SQL Server Management Studio允许它。如果在视图上单击“编辑顶部xx行”,它允许您在一些看起来像标准.NET DataGridView的列中编辑数据 - 尽管感觉有点神奇。

所以,有几个问题:

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

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

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

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

任何正常的指导都将受到高度赞赏。

马龙

1 个答案:

答案 0 :(得分:1)

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

来自documentation

  

可更新视图

     

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

     

任何修改,包括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一样。)