我有一条相当冗长的SQL语句,其中包含多个内部连接和交叉应用语句,用于进行某些计算,并根据上一个查询为每个条目创建新列。
我想知道在C#代码中运行此查询以填充GridView的最有效/最佳方法是什么?
将SQL拆分并将其中一些计算写入C#中?
创建存储过程?
仅将sql作为字符串传递,并创建数据集,然后将数据集绑定到gridview似乎太慢了。
我有一条相当冗长的SQL语句,其中包含多个内部连接和交叉应用语句,用于进行某些计算,并根据上一个查询为每个条目创建新列。
我想知道在C#代码中运行此查询以填充GridView的最有效/最佳方法是什么?
将SQL拆分并将其中一些计算写入C#中?
创建存储过程?
仅将sql作为字符串传递,并创建数据集,然后将数据集绑定到gridview似乎太慢了。
看起来你的问题是在每次SELECT时都运行一些昂贵的计算。
解决这个问题的正确方法是预先计算计算结果并将其存储在数据库中,这样你的网格就可以简单地读取数据而不需要进行任何计算。
当基础数据发生更改时,你可以触发重新计算结果。你可以使用触发器或从C#代码调用实现计算的存储过程。
你是否已经在代码的其他地方执行了任何SQL脚本(例如,您已经决定如何访问数据)?我问这个问题是因为最近我使用ADO .net实体框架模型来弥合数据库和我想要从数据库中处理的概念对象之间的差距,并且我强烈推荐它。非常容易掌握。一旦您实现了EF模型,只需使用EF模型生成的方法调用存储过程(是的,我建议您将查询保存在存储过程中),并将其提取到自动创建的类中。然后,您刚刚从该过程检索的类列表可以显然地绑定到任何您喜欢的控件。
http://msdn.microsoft.com/en-us/data/ff191186
这值得知道。
话虽如此:不使用数据集而是使用在后台填充的可观察对象集合,至少可以在列表被填充时显示结果。