asp.net 查询大数据量(百万条以上)如何快

作者&投稿:后汪 (若有异议请与网页底部的电邮联系)
ASP.NET大数据量处理~

不要在数据库里面进行排序啊什么的 这样很影响性能.
都放在程序里面进行 这样会好很多
而且你需要做语句的优化 不管是数据库的还是vs里面

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Interop.Excel;
using System.Data;

namespace ExcelTest
{
public class ExcelUtil
{
System.Data.DataTable table11 = new System.Data.DataTable();

public void ExportToExcel(System.Data.DataTable table, string saveFileName)
{

bool fileSaved = false;

//ExcelApp xlApp = new ExcelApp();

Application xlApp = new Application();

if (xlApp == null)
{
return;
}

Workbooks workbooks = xlApp.Workbooks;
Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet);
Worksheet worksheet = (Worksheet)workbook.Worksheets[1];//取得sheet1

long rows = table.Rows.Count;

/*下边注释的两行代码当数据行数超过行时,出现异常:异常来自HRESULT:0x800A03EC。因为:Excel 2003每个sheet只支持最大行数据

//Range fchR = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[table.Rows.Count+2, gridview.Columns.View.VisibleColumns.Count+1]);

//fchR.Value2 = datas;*/

if (rows > 65535)
{

long pageRows = 60000;//定义每页显示的行数,行数必须小于

int scount = (int)(rows / pageRows);

if (scount * pageRows < table.Rows.Count)//当总行数不被pageRows整除时,经过四舍五入可能页数不准
{
scount = scount + 1;
}

for (int sc = 1; sc <= scount; sc++)
{
if (sc > 1)
{

object missing = System.Reflection.Missing.Value;

worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.Add(

missing, missing, missing, missing);//添加一个sheet

}

else
{
worksheet = (Worksheet)workbook.Worksheets[sc];//取得sheet1
}

string[,] datas = new string[pageRows + 1, table.Columns.Count+ 1];


for (int i = 0; i < table.Columns.Count; i++) //写入字段
{
datas[0, i] = table.Columns[i].Caption;
}

Range range = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[1, table.Columns.Count]);
range.Interior.ColorIndex = 15;//15代表灰色
range.Font.Bold = true;
range.Font.Size = 9;

int init = int.Parse(((sc - 1) * pageRows).ToString());
int r = 0;
int index = 0;
int result;

if (pageRows * sc >= table.Rows.Count)
{
result = table.Rows.Count;
}
else
{
result = int.Parse((pageRows * sc).ToString());
}
for (r = init; r < result; r++)
{
index = index + 1;
for (int i = 0; i < table.Columns.Count; i++)
{
if (table.Columns[i].DataType == typeof(string) || table.Columns[i].DataType == typeof(Decimal) || table.Columns[i].DataType == typeof(DateTime))
{
object obj = table.Rows[r][table.Columns[i].ColumnName];
datas[index, i] = obj == null ? "" : "'" + obj.ToString().Trim();//在obj.ToString()前加单引号是为了防止自动转化格式

}

}
}

Range fchR = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[index + 2, table.Columns.Count + 1]);

fchR.Value2 = datas;
worksheet.Columns.EntireColumn.AutoFit();//列宽自适应。

range = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[index + 1, table.Columns.Count]);

//15代表灰色

range.Font.Size = 9;
range.RowHeight = 14.25;
range.Borders.LineStyle = 1;
range.HorizontalAlignment = 1;

}

}

else
{

string[,] datas = new string[table.Rows.Count + 2, table.Columns.Count + 1];
for (int i = 0; i < table.Columns.Count; i++) //写入字段
{
datas[0, i] = table.Columns[i].Caption;
}

Range range = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[1, table.Columns.Count]);
range.Interior.ColorIndex = 15;//15代表灰色
range.Font.Bold = true;
range.Font.Size = 9;

int r = 0;
for (r = 0; r < table.Rows.Count; r++)
{
for (int i = 0; i < table.Columns.Count; i++)
{
if (table.Columns[i].DataType == typeof(string) || table.Columns[i].DataType == typeof(Decimal) || table.Columns[i].DataType == typeof(DateTime))
{
object obj = table.Rows[r][table.Columns[i].ColumnName];
datas[r + 1, i] = obj == null ? "" : "'" + obj.ToString().Trim();//在obj.ToString()前加单引号是为了防止自动转化格式

}

}

//System.Windows.Forms.Application.DoEvents();


}

Range fchR = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[table.Rows.Count + 2, table.Columns.Count + 1]);

fchR.Value2 = datas;

worksheet.Columns.EntireColumn.AutoFit();//列宽自适应。

range = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[table.Rows.Count + 1, table.Columns.Count]);

//15代表灰色

range.Font.Size = 9;
range.RowHeight = 14.25;
range.Borders.LineStyle = 1;
range.HorizontalAlignment = 1;
}

if (saveFileName != "")
{
try
{
workbook.Saved = true;
workbook.SaveCopyAs(saveFileName);
fileSaved = true;

}

catch (Exception ex)
{
fileSaved = false;
}

}

else
{

fileSaved = false;

}

xlApp.Quit();

GC.Collect();//强行销毁

}
}
}

1、索引2、你用存储过程,存储过程里还不是要写语句的?有区别?如果每次查询条件不一样,可以用动态sql,用sp_executesql执行,效率还不错,比exec执行动态sql快

数据库的索引器,存储过程ap.net的2级缓存,界面的缓存

写个所引器

应该要用的数据结构里面的算法吧,折半查找


安溪县19261655857: asp.net 查询大数据量(百万条以上)如何快
费桂新达: 数据库的索引器, 存储过程 ap.net的2级缓存, 界面的缓存

安溪县19261655857: 在ASP.NET中 当数据库数据量过百W的时候 应该怎样去提高数据库检索速度呢,最好保持在3秒? 我用了好多方法 包括entity框架 有高手帮我解决没
费桂新达: 数据量百万 不可能都显示在页面上的...都是分页显示....现在的二分法查找速度挺快的......独立存储过程比拼接的会快

安溪县19261655857: asp.net几十万条以上的数据查询!如何高效率分页和查询显示! -
费桂新达: 1.使用存储过程分页.2.常用列,建立非聚集索引.ps:检查一下存储过程的效率.

安溪县19261655857: asp.net 查询超大数据量,怎样执行效率更快??
费桂新达: ASP.NET 的 GridView 控件、SqlDataSource 和 ObjectDataSource 控件,其内建的「数据分页 (pager)」功能,默认做法,是当 user 每次单击 GridView 的页码换页时,都重新去数据库里,把数据表的「所有」数据,「全部」重新 SELECT ...

安溪县19261655857: 数据库有上100万条数据时asp.net怎么样才能提高浏览速度? -
费桂新达: 如果是.NET 建议使用ADO.NET 在需要数据的时候才调用数据 而且脱机操作

安溪县19261655857: Asp.net +MySQL GridView 超大数据量
费桂新达: 分页显示,每次读取一页数据,不要用GridView的分页,他是先全部读取出来再分页的,第一次会非常慢的;自己写一个分页,或者用AspNerPager分页工具

安溪县19261655857: ASP.NET大数据量处理 -
费桂新达: 不要在数据库里面进行排序啊什么的 这样很影响性能.都放在程序里面进行 这样会好很多 而且你需要做语句的优化 不管是数据库的还是vs里面

安溪县19261655857: asp.net 搜索比较慢? -
费桂新达: 是这样实现的.每个表中多增加一个Text字段,里面存放是前面所有字段的内容,在添加修改记录的时候,就把所有录入连接成一个字符串保存在这个字段里面了,搜索的时候也只搜索这个字段.但,根据你有很多表的情况.建议单独建个表,...

安溪县19261655857: asp中查询大量数据时怎样出来一个提示等待的页面?急需代码 求助!!! -
费桂新达: 在你内容显示页里适当位置加入loading图片,等数据取完之后取消图片就可以了.取值代码....开始取值同时加入loading图片.<SCRIPT language="javascript"> window.document.getElementById("img").innerHTML = "<img src='...

安溪县19261655857: asp.net 连接数据库 如何快速查询大量数据中的一条 -
费桂新达: 会写SQL查询语句吗?如:select * from tablename where id=3.意思为查询表名用tablename中id是3的那条记录.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网