如何从SQL Server的海量数据使用ado.net? [英] How get huge data from sql server using ado.net?

查看:136
本文介绍了如何从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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆