我正在使用 c# 语言开发 ASP.NET 2.0 应用程序。
谁能告诉我以下哪种方法最好: 场景:我需要从数据库中获取数据并将其绑定到网格视图。
案例1:我可以使用存储过程(用于迭代从基本查询获得的结果并对这个结果集进行操作)来获得最终结果。
案例2:我可以得到结果(从基本查询中获得)并在代码隐藏文件中进行迭代和操作。
请让我知道哪种情况是良好编程的最佳方式。
谢谢鲁帕
我正在使用 c# 语言开发 ASP.NET 2.0 应用程序。
谁能告诉我以下哪种方法最好: 场景:我需要从数据库中获取数据并将其绑定到网格视图。
案例1:我可以使用存储过程(用于迭代从基本查询获得的结果并对这个结果集进行操作)来获得最终结果。
案例2:我可以得到结果(从基本查询中获得)并在代码隐藏文件中进行迭代和操作。
请让我知道哪种情况是良好编程的最佳方式。
谢谢鲁帕
我认为这取决于情况,例如从基本查询返回的数据量,如果您正在大量过滤您希望尽可能靠近数据库的数据。
此外,存储过程将允许您在不重新部署应用程序的情况下更改查询。
但是,在代码或数据集上进行过滤可能会让您感觉更舒服。
如果加载了数据库服务器,那么应用程序的过滤速度可能会更快。
在大多数情况下,性能可能会表明您在数据库方面会做得更好。
您将执行什么类型的操作来获得“最终结果”?在数据库端执行大部分工作通常更快,而不是带来大量数据,然后执行一些可以在数据库端处理的操作(或更糟糕的是,主要过滤)。
我会使用案例 1,但我也会尝试避免迭代数据并在一个或几个查询中执行所有操作。对 SQL Server 数据库进行迭代并不快,而且离数据越远,它就越慢(比如在 gui 中迭代并调用调用数据库的业务层)。
这就是我会尝试的方式。
像这样
CREATE PROC myProc @myParam int
AS
CREATE TABLE #temp1(myCol int)
--only get the required data and apply any operations
INSERT INTO #temp1 (myCol)
SELECT myCol FROM myTable WHERE myCol2=@myParam
UPDATE #temp1 --do any operation on the temporary table
SELECT myCol FROM #temp1 --apply any additional filter or operations
GO
我相信通过阅读一些有关最佳实践的信息可能会更好地回答这个问题。我认为在您的情况下,您可能会研究一种编程模型,该模型将帮助您定义一些最适合您的实践以及您想要实现的目标。
在这种情况下,有几个问题,比如你要为你的代码编写单元测试吗?关注点分离对您来说是个问题吗?你的程序有多大?
为什么不寻找像Model View Presenter这样的最佳实践,有时称为监督控制器或被动视图,或者像 ASP.NET MVC 这样更结构化的 ASP.NET 框架,您可能会发现最佳实践更容易遵循.
我的选择最好在存储过程中进行迭代。因为如果数据变高,proc 是更好的选择。
为此,您可以使用 DataSet 对象。调用存储过程并使用 DataAdapter.Fill 方法填充 DataSet 对象,然后
您可以使用分配gridview的数据源
数据源绳索。
如果您需要遍历数据表,可以使用数据集中的相应数据表来完成。