Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在更改DataGrid内容时更新数据库中的表_Sql Server_Wpf_Database Connection_Wpfdatagrid - Fatal编程技术网

Sql server 在更改DataGrid内容时更新数据库中的表

Sql server 在更改DataGrid内容时更新数据库中的表,sql-server,wpf,database-connection,wpfdatagrid,Sql Server,Wpf,Database Connection,Wpfdatagrid,您好,我正在WPF中开发一个应用程序,它将有分页记录(我自己根据过滤器或用户希望显示的每页记录数进行分页) 所以我从来没有认真研究过DataGrid,我想问的是,当我们使用DataGrid来更新数据库中的表时,什么是最好的方法和更好的策略 我们检测已更改的行,或者更新数据库中的整个表,更好的方法是什么 由于用户可以先更改一行,然后再更改另一行,并且假设用户更改了50行,因此应用程序必须与数据库连接50次?可能是解决此问题的最常见的基础结构解决方案,它基本上存储应用于数据的更改,并在准备就绪时在数

您好,我正在WPF中开发一个应用程序,它将有分页记录(我自己根据过滤器或用户希望显示的每页记录数进行分页)

所以我从来没有认真研究过DataGrid,我想问的是,当我们使用DataGrid来更新数据库中的表时,什么是最好的方法和更好的策略

我们检测已更改的行,或者更新数据库中的整个表,更好的方法是什么

由于用户可以先更改一行,然后再更改另一行,并且假设用户更改了50行,因此应用程序必须与数据库连接50次?

可能是解决此问题的最常见的基础结构解决方案,它基本上存储应用于数据的更改,并在准备就绪时在数据库的事务中执行这些更改。有很多类似或的ORM映射器已经为您完成了这项工作,所以我从这里开始

编辑


参见示例实现,因为从您的评论中听起来您需要编写自己的版本,但基本上您建立了一个插入、更新、删除的列表,并在一个事务中执行它们,首先插入,然后更新,然后删除,但我建议您看看我上面描述的ORM,它们已经有了这一功能。

但我不明白如何做到这一点。。。如果我在表之间有关系,那么当我查询主表时,我得到的不是id,而是另一列中相应的值。因此,当我从DataGrid获取行时,我获取的是值,而不是列与另一个表有关系的id。因此,在我将更新操作放入类似于您建议的内容之前,我可能必须获取相应的ID?好的,也许您可以进一步讨论有关数据的问题,您是否汇总数据库行并显示这些行?还是数据库中的一行显示为网格中的一行?不,我将获取整个表并将其作为源放入DataGrid中。但是那张桌子有外键。因此,当我执行查询时,我使用内部联接不显示Id,而是显示与这些Id对应的其他值。因此,在我的DataGrid中,我没有显示ID,而是显示其他值。当我想更新我的数据库时,我使用来自DataGrid的事件OnRowEditEnding,当触发事件时,我从已更改的行中获取值,并通过SP更新DB。在这种情况下,我们将在SP中发现与这些值对应的ID以更新有问题的表?鉴于您没有使用实体框架或其他ORM映射程序,您必须编写数据库的自定义实现工作单元模式,所以要回答您的第一条评论,是的,您需要跟踪参考行的ID,我用工作单元的示例实现编辑了我的答案,其余的也很有趣