在代码后面调用一个过程或处理 - 哪个更好?

时间:2009-08-31 07:22:19

标签: c# stored-procedures code-behind

我正在使用c#语言编写ASP.NET 2.0应用程序。

谁能告诉我哪种方式最好: 场景: 我需要从数据库中获取数据并将其绑定到网格视图。

案例1: 我可以使用存储过程(用于迭代从基本查询获得的结果并对此结果集执行操作)来获取最终结果。

案例2: 我可以得到结果(从基本查询中获得)并在代码隐藏文件中进行迭代和操作。

请让我知道哪种情况是良好编程的最佳方式。

由于 鲁帕

6 个答案:

答案 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中迭代并调用一个调用数据库的业务层)。

我会尝试这样做。

  1. 创建一个临时表
  2. 使用过滤器将基本查询中的数据导入临时表并执行所有可能的操作。
  3. 如果我无法在您的基本查询中执行所有操作,那么我会在临时表上执行一些设置操作
  4. 将临时表返回给调用应用程序
  5. 喜欢这个

    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