步步为营VS 2008 + .NET 3.5(11) - DLINQ(LINQ to SQL)之大数据量分页、延迟执行和日志记录

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
日志服务 SLS,月写入数据量 50GB 1个月
简介:
[索引页]
[源码下载]


步步为营VS 2008 + .NET 3.5(11) - DLINQ(LINQ to SQL)之大数据量分页、延迟执行和日志记录


作者: webabcd


介绍
以Northwind为 示例数据库 ,DLINQ(LINQ to SQL)之结合 GridView 控件和 ObjectDataSource 控件演示大数据量分页,同时介绍 延迟执行和日志记录


示例
PagingAndLogging.aspx
<%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="PagingAndLogging.aspx.cs" 
        Inherits="LINQ_DLINQ_PagingAndLogging" Title="大数据量分页、延迟执行和日志记录" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="Server"> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server"> 
        <asp:GridView ID="gvProduct" runat="server" DataSourceID="odsProduct" AllowPaging="True" PageSize="5"> 
        </asp:GridView> 
        <asp:ObjectDataSource ID="odsProduct" runat="server" EnablePaging="True" SelectCountMethod="GetProductCount" 
                SelectMethod="GetProduct" TypeName="PagingAndLogging"> 
                <SelectParameters> 
                        <asp:Parameter Name="startRowIndex" Type="Int32" DefaultValue="0" /> 
                        <asp:Parameter Name="maximumRows" Type="Int32" DefaultValue="10" /> 
                </SelectParameters> 
        </asp:ObjectDataSource> 
</asp:Content>
 
PagingAndLogging.cs
InBlock.gif using System; 
InBlock.gif using System.Data; 
InBlock.gif using System.Configuration; 
InBlock.gif using System.Linq; 
InBlock.gif using System.Web; 
InBlock.gif using System.Web.Security; 
InBlock.gif using System.Web.UI; 
InBlock.gif using System.Web.UI.WebControls; 
InBlock.gif using System.Web.UI.WebControls.WebParts; 
InBlock.gif using System.Web.UI.HtmlControls; 
InBlock.gif using System.Xml.Linq; 
InBlock.gif 
InBlock.gif using System.ComponentModel; 
InBlock.gif using System.Collections.Generic; 
InBlock.gif using System.IO; 
InBlock.gif using DAL; 
InBlock.gif 
/// <summary> 
/// PagingAndLogging 的摘要说明 
/// </summary> 
InBlock.gif[DataObject] 
InBlock.gif public  class PagingAndLogging 
InBlock.gif
InBlock.gif        [DataObjectMethod(DataObjectMethodType.Select,  true)] 
InBlock.gif         public List<Products> GetProduct( int startRowIndex,  int maximumRows) 
InBlock.gif        { 
InBlock.gif                NorthwindDataContext ctx =  new NorthwindDataContext(); 
InBlock.gif 
InBlock.gif                 // System.Data.Linq.DataContext的记录日志的功能 
InBlock.gif                StreamWriter sw =  new StreamWriter(HttpContext.Current.Request.PhysicalApplicationPath +  "Log.txt"true); 
InBlock.gif                ctx.Log = sw; 
InBlock.gif 
InBlock.gif                var products = (from p  in ctx.Products 
InBlock.gif                                                select p).Skip(startRowIndex).Take(maximumRows); 
InBlock.gif 
InBlock.gif                 // products实现了IQueryable<T>接口 
InBlock.gif                 // 所以可以用如下方法从中获取DbCommand 
InBlock.gif                System.Data.Common.DbCommand cmd = ctx.GetCommand(products); 
InBlock.gif                 string commandText = cmd.CommandText; 
InBlock.gif                 foreach (System.Data.Common.DbParameter param  in cmd.Parameters) 
InBlock.gif                { 
InBlock.gif                         string parameterName = param.ParameterName; 
InBlock.gif                         object value = param.Value; 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                 // 延迟执行(Deferred Execution) 
InBlock.gif                 // products实现了IEnumerable<T>接口 
InBlock.gif                 // IEnumerable<T>接口的一个特性是,实现它的对象可以把实际的查询运算延迟到第一次对返回值进行迭代(yield)的时候 
InBlock.gif                 // ToList()之前,如果是LINQ to SQL的话,那么就可以通过products.ToString()查看LINQ生成的T-SQL 
InBlock.gif                 // ToList()后则执行运算 
InBlock.gif                var listProducts = products.ToList(); 
InBlock.gif 
InBlock.gif                 // 执行运算后System.Data.Linq.DataContext会记录日志,所以应该在执行运算后Close掉StreamWriter 
InBlock.gif                sw.Flush(); 
InBlock.gif                sw.Close(); 
InBlock.gif 
InBlock.gif                 return listProducts; 
InBlock.gif        } 
InBlock.gif 
InBlock.gif         public  int GetProductCount( int startRowIndex,  int maximumRows) 
InBlock.gif        { 
InBlock.gif                NorthwindDataContext ctx =  new NorthwindDataContext(); 
InBlock.gif 
InBlock.gif                StreamWriter sw =  new StreamWriter(HttpContext.Current.Request.PhysicalApplicationPath +  "Log.txt"true); 
InBlock.gif                ctx.Log = sw; 
InBlock.gif 
InBlock.gif                 // Count查询操作符(不延迟) - 返回集合中的元素个数 
InBlock.gif                 int c = (from p  in ctx.Products 
InBlock.gif                                 select 0).Count(); 
InBlock.gif 
InBlock.gif                sw.Flush(); 
InBlock.gif                sw.Close(); 
InBlock.gif 
InBlock.gif                 return c; 
InBlock.gif        } 
InBlock.gif}
 
通过查看日志可以发现,单击第1页时DLINQ生成的T-SQL语句如下
SELECT  TOP 5 [t0].[ProductID], [t0].[ProductName], [t0].[SupplierID], [t0].[CategoryID], [t0].[QuantityPerUnit], [t0].[UnitPrice], [t0].[UnitsInStock], [t0].[UnitsOnOrder], [t0].[ReorderLevel], [t0].[Discontinued] 
FROM [dbo].[Products]  AS [t0] 
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1 

SELECT  COUNT(*)  AS [value] 
FROM [dbo].[Products]  AS [t0] 
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1
 
通过查看日志可以发现,单击第10页时DLINQ生成的T-SQL语句如下
SELECT  TOP 5 [t1].[ProductID], [t1].[ProductName], [t1].[SupplierID], [t1].[CategoryID], [t1].[QuantityPerUnit], [t1].[UnitPrice], [t1].[UnitsInStock], [t1].[UnitsOnOrder], [t1].[ReorderLevel], [t1].[Discontinued] 
FROM ( 
         SELECT ROW_NUMBER()  OVER ( ORDER  BY [t0].[ProductID], [t0].[ProductName], [t0].[SupplierID], [t0].[CategoryID], [t0].[QuantityPerUnit], [t0].[UnitPrice], [t0].[UnitsInStock], [t0].[UnitsOnOrder], [t0].[ReorderLevel], [t0].[Discontinued])  AS [ROW_NUMBER], [t0].[ProductID], [t0].[ProductName], [t0].[SupplierID], [t0].[CategoryID], [t0].[QuantityPerUnit], [t0].[UnitPrice], [t0].[UnitsInStock], [t0].[UnitsOnOrder], [t0].[ReorderLevel], [t0].[Discontinued] 
         FROM [dbo].[Products]  AS [t0] 
        )  AS [t1] 
WHERE [t1].[ROW_NUMBER] > @p0 
-- @p0: Input Int32 (Size = 0; Prec = 0; Scale = 0) [45] 
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1 

SELECT  COUNT(*)  AS [value] 
FROM [dbo].[Products]  AS [t0] 
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1
 




     本文转自webabcd 51CTO博客,原文链接: http://blog.51cto.com/webabcd/345013 ,如需转载请自行联系原作者
相关实践学习
日志服务之数据清洗与入湖
本教程介绍如何使用日志服务接入NGINX模拟数据,通过数据加工对数据进行清洗并归档至OSS中进行存储。
相关文章
|
22天前
|
SQL 机器学习/深度学习 分布式计算
MaxCompute产品使用问题之如何调整改变SQL查询的严格性
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
23天前
|
SQL 分布式计算 前端开发
MaxCompute操作报错合集之SQL脚本设置参数set odps.mapred.reduce.tasks=18;没有生效,是为什么
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
20天前
|
SQL 大数据
常见大数据面试SQL-每年总成绩都有所提升的学生
一张学生成绩表(student_scores),有year-学年,subject-课程,student-学生,score-分数这四个字段,请完成如下问题: 问题1:每年每门学科排名第一的学生 问题2:每年总成绩都有所提升的学生
|
23天前
|
SQL 分布式计算 大数据
MaxCompute操作报错合集之使用spark.sql执行rename分区操作,遇到任务报错退出的情况,该怎么办
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
23天前
|
SQL 分布式计算 大数据
MaxCompute产品使用问题之如果oss文件过大,如何在不调整oss源文件大小的情况下优化查询sql
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
23天前
|
SQL 分布式计算 大数据
MaxCompute产品使用问题之odps sql 底层计算框架是MR吗
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
11天前
|
SQL 机器学习/深度学习 自然语言处理
大数据SQL助手:告别繁琐数据处理,轻松搞定SQL查询!
大数据SQL助手:告别繁琐数据处理,轻松搞定SQL查询!
19 0
|
1月前
|
分布式计算 DataWorks 大数据
MaxCompute产品使用合集之odps.sql.mapper.split.size和odps.stage.mapper.split.size这两个参数的区别是什么
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
1月前
|
SQL 分布式计算 大数据
MaxCompute产品使用合集之如何在本地IDE(如IntelliJ IDEA)中配置MaxCompute (mc) 的任务和调试SQL
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
1月前
|
SQL 机器学习/深度学习 分布式计算
MaxCompute产品使用合集之sql代码中支持插入jinja语法语句吗
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。