如何从SQL Server的海量数据使用ado.net? [英] How get huge data from sql server using ado.net?
本文介绍了如何从SQL Server的海量数据使用ado.net?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我收到错误的同时获取数据。
类型的异常的System.OutOfMemoryException被扔
错误获取行 DataAdapter.Fill方法(dataTable的);
(2826000)记录数清我的表。
这里是code我使用。
VAR的dataTable =新的DataTable();
VAR DicTableNameAndValues =新字典<字符串,对象>();
使用(VAR连接=新的SqlConnection(ConnectionString的))
{
connection.Open();
VAR dataQuery =SELECT * FROM+表;
使用(VAR命令=新的SqlCommand(dataQuery,连接))
{
VAR的DataAdapter =新的SqlDataAdapter(命令);
DataAdapter.Fill方法(的dataTable);
VAR的结果= dataTable.AsEnumerable()跳过(跳过)。取(的pageSize).ToList()选择(C => c.ItemArray)。
DicTableNameAndValues.Add(表,结果);
}
}
解决方案
您可以根据需要的所有记录您的应用程序,而不是获得一定数量的记录。您可以创建一个存储过程的东西下面的效果。
- 创建一个具有以下参数的存储过程
DECLARE @skip INT,@pagesize INT
--Added测试值
SELECT @skip = 4,@pagesize = 3
--Give @tbl你的表名。
/ *如果你已经有一个标识键,然后可能ROW_NUMBER函数可能不
是必需的。但是,如果记录被越来越删除以及然后ROW_NUMBER是一个
更好的选择* /
SELECT * FROM
(SELECT ROW_NUMBER()OVER(ORDER BY Your_Col)AS ROWNUM,* FROM @tbl)作为TBL
WHERE ROWNUM BETWEEN(@skip * @pagesize)+ 1和(@skip + 1)*(@pagesize)
希望这有助于。
I'm getting error while fetching the data
Exception of type 'System.OutOfMemoryException' was thrown
Error getting line is dataAdapter.Fill(dataTable);
(2826000) records count in my table.
here is the code i'm using.
var dataTable = new DataTable();
var DicTableNameAndValues = new Dictionary<string, object>();
using (var connection = new SqlConnection(ConnectionString))
{
connection.Open();
var dataQuery = "SELECT * FROM " + table;
using (var command = new SqlCommand(dataQuery, connection))
{
var dataAdapter = new SqlDataAdapter(command);
dataAdapter.Fill(dataTable);
var result = dataTable.AsEnumerable().Skip(skip).Take(pageSize).ToList().Select(c => c.ItemArray);
DicTableNameAndValues.Add(table, result);
}
}
解决方案
You can get a certain number of records as required by your application instead of all the records. You can create a stored procedure something to the effect of the following.
--Create a stored procedure with following parameters
DECLARE @skip int, @pagesize int
--Added testing values
SELECT @skip = 4, @pagesize = 3
--Give @tbl with your table name.
/*If you already have an identity key then probably row_number function might not
be required. But if the records are getting deleted as well then row_number is a
better option*/
SELECT * FROM
(SELECT ROW_NUMBER() over(ORDER BY Your_Col) AS ROWNUM, * FROM @tbl) as tbl
WHERE ROWNUM BETWEEN (@skip * @pagesize) + 1 and (@skip + 1) * (@pagesize)
Hope this helps.
这篇关于如何从SQL Server的海量数据使用ado.net?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文