Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.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
C# 运行大型SQL语句并填充gridview_C#_Asp.net_Sql_Gridview - Fatal编程技术网

C# 运行大型SQL语句并填充gridview

C# 运行大型SQL语句并填充gridview,c#,asp.net,sql,gridview,C#,Asp.net,Sql,Gridview,我有一个相当大的SQL语句,它有许多内部联接和交叉应用语句来执行一些计算,这些计算基于前面的查询为每个条目创建新的列 我想知道从C#in代码运行此查询以填充gridview最有效/最好的方法是什么 分解SQL并用C#编写一些计算 创建存储过程 仅仅将sql作为字符串传入并创建一个数据集,然后将数据集绑定到gridview似乎花费了太长的时间。您是否已经在代码中的任何其他地方执行任何sql脚本(即,您是否已经决定如何访问数据)?我问这个问题的原因是,我最近使用ADO.net实体框架模型来弥合我的数

我有一个相当大的SQL语句,它有许多内部联接和交叉应用语句来执行一些计算,这些计算基于前面的查询为每个条目创建新的列

我想知道从C#in代码运行此查询以填充gridview最有效/最好的方法是什么

分解SQL并用C#编写一些计算

创建存储过程


仅仅将sql作为字符串传入并创建一个数据集,然后将数据集绑定到gridview似乎花费了太长的时间。

您是否已经在代码中的任何其他地方执行任何sql脚本(即,您是否已经决定如何访问数据)?我问这个问题的原因是,我最近使用ADO.net实体框架模型来弥合我的数据库和我想从数据库中的数据处理的概念对象之间的差距,我强烈推荐它。也很容易掌握窍门。一旦实现了EF模型,就只需要使用EF模型生成的方法调用存储过程(是的,我建议您将查询保存在存储过程中),并将其提取到类中(这些类也是由模型自动创建的)。然后,您刚刚从过程中检索到的类列表显然可以绑定到您喜欢的任何控件

这是值得知道的

我想知道从C#in代码运行此查询以填充gridview最有效/最好的方法是什么

你的意思是从唯一一个可能的版本开始

执行返回表的查询的唯一方法是运行返回DataReader的命令。指向如果给定了SQL,那么就是它。没有其他选择

注意:您可能想在这里扔的所有其他东西都在内部使用它。他们把它包起来

分解SQL并用C#编写一些计算

我最喜欢的食物是什么?你告诉我。很大程度上取决于硬件、数据量和查询。无法回答

创建存储过程

没有区别

仅仅将sql作为字符串传入并创建一个数据集,然后将数据集绑定到gridview似乎花费了太长的时间

  • 什么东西太长了
  • 怎么这么久?加载1亿行?SQL Server处理?所有这些决定了选择。请提供相关信息-让我们知道时间花在哪里

这就是说:不使用数据集,而是在后台填充对象的可观察集合,至少可以在填充列表时显示结果。

您的核心问题是数据库查询必须运行得更快。一旦有了解决方案,就可以相应地调整代码

我要看的第一件事是优化数据库索引以提高查询性能。如果可以,请使用和(我认为SQL Server的Express edition中没有这些工具)。请注意,新索引还可能导致插入操作的性能下降,因此,如果您的数据库需要支持高事务量,则应小心使用此方法

如果您可以找到一种方法,通过将查询分解为多个部分并使用过程代码聚合结果来提高查询性能,那么将查询迁移到一个新的方法是有意义的。这将允许您在如何获取数据方面具有最大的灵活性

首先,我将在SQL编辑器中对查询和/或部分查询进行原型化,以便您在决定ASP.NET代码将如何更改之前,只关注查询优化


如果不了解您的模式和所使用的查询的细节,我就无法进一步说明如何优化数据提取。但这应该会让你朝着正确的方向前进。

看起来你的问题是,你对每一个选择都进行了一些代价高昂的计算。 正确的解决方案是预先计算计算结果并将其存储在数据库中,这样您的网格就可以在不进行任何计算的情况下读取数据


当基础数据更改时,可以触发结果的重新计算。您可以使用触发器或调用从C代码实现计算的存储过程。

1)返回的数据集有多大(行和列),2)向我们显示SQL语句。如果您喜欢使用LINQ,您可以轻松地在C代码中进行计算。我真的不想在这里发布SQL,但我会尝试更改它,使其更通用…根据搜索,它最多可以有10000行,至少有30列。我要添加的唯一注释是,我很可能会将其放在存储过程中。同意。我把所有在数据库管理系统中对数据库做大量工作的代码都留下了。选择实体框架模型通常是错误的建议!?“很多”?老实说,我根本不记得提出过“许多”观点——我提出的两个建议是实现一个EF模型(广泛使用,没有错),以及将脚本存储在一个过程中(本线程中的许多其他人都同意我的观点)。另外,我认为你不接受我的编辑是很痛苦的——你的答案的拼写和语法还有很多需要改进的地方。伟大的查看Frans Bourma关于存储过程谬误的老博文(google帮助)。大多数宣传他们的人都使用参数来表示他们不了解数据库。实体框架模型不适合报告和分析,我敢打赌OP的分析设置带有特殊的查询要求,这在存储过程中是不可行的。女士们,把你的战斗带到别处去吧,是的,TomTom确实给人的印象是t*at,但是嘿,hoLet假设你是对的,TomTom-EF当然不是“不可否认的”