我正在使用c#语言编写ASP.NET 2.0应用程序。
谁能告诉我哪种方式最好: 场景: 我需要从数据库中获取数据并将其绑定到网格视图。
案例1: 我可以使用存储过程(用于迭代从基本查询获得的结果并对此结果集执行操作)来获取最终结果。
案例2: 我可以得到结果(从基本查询中获得)并在代码隐藏文件中进行迭代和操作。
请让我知道哪种情况是良好编程的最佳方式。
由于 鲁帕
答案 0 :(得分:2)
我认为这取决于具体情况,例如从您的基本查询返回的数据量,如果您要尽可能地过滤您希望尽可能靠近数据库完成的数据。
此外,存储过程将允许您更改查询而无需重新部署应用程序。
但是,您可能更愿意在代码或数据集中进行过滤。
如果加载了数据库服务器,那么应用程序在过滤时可能会更快。
在大多数情况下,性能可能会决定你在数据库中会更好。
答案 1 :(得分:1)
您将采取什么类型的行动来获得“最终结果?”在数据库端执行大量工作通常更快,而不是带来大量数据,然后执行一些可能已在数据库端处理的操作(或更糟糕的是,主要过滤)。
答案 2 :(得分:0)
您可以使用DataSet对象来实现此目的。调用存储过程并使用DataAdapter.Fill方法和
填充DataSet对象您可以使用
指定gridview的数据源DataSource roperty。
如果需要遍历数据表,可以使用数据集中相应的数据表来完成。
答案 3 :(得分:0)
我的选项最好在存储过程中进行迭代。因为如果数据变高,proc是更好的选择。
答案 4 :(得分:0)
我确信通过阅读一些关于最佳实践的问题可以更好地回答这个问题。我认为在您的情况下,您可能会研究一种编程模型,它将帮助您定义最适合您的实践以及您要实现的目标。
在这种情况下,有一些问题,比如你要为你的代码编写单元测试吗?关注分离是一个问题吗?你的课程有多大?
为什么不寻找像Model View Presenter之类的最佳实践,有时称为Supervising Controller or Passive View,或者像ASP.NET MVC那样更加结构化的ASP.NET框架,您可能会发现最佳实践是更容易理解。
答案 5 :(得分:0)
我会使用案例1,但我也会尝试避免迭代数据并在一个或几个查询中执行所有操作。迭代一个SQL服务器数据库并不快,离数据越远,它就越慢(比如在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