datatable 分块读取mssql数据库数据
时间: 2023-11-16 16:07:54 浏览: 112
对DataTable分页获取数据
5星 · 资源好评率100%
在使用 DataTable 读取 MSSQL 数据库数据时,可以通过分块读取的方式提高读取性能,避免一次性读取过多的数据导致内存溢出或者读取时间过长的问题。以下是一个简单的代码示例:
```csharp
using System.Data;
using System.Data.SqlClient;
// 设置每次读取的数据量
int batchSize = 1000;
// 创建连接对象
string connStr = "Data Source=your_server;Initial Catalog=your_database;Integrated Security=True";
using (SqlConnection conn = new SqlConnection(connStr))
{
// 打开连接
conn.Open();
// 创建命令对象
string sql = "SELECT * FROM your_table";
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
// 创建适配器对象
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
// 创建数据表对象
DataTable dt = new DataTable();
// 循环读取数据
int start = 0;
while (true)
{
// 设置起始位置和读取数量
adapter.SelectCommand.CommandText = sql + " ORDER BY your_column OFFSET " + start + " ROWS FETCH NEXT " + batchSize + " ROWS ONLY";
// 读取数据并填充到数据表对象中
adapter.Fill(dt);
// 如果读取到的数据量小于指定的数量,说明已经读取完毕,退出循环
if (dt.Rows.Count < batchSize)
{
break;
}
// 处理读取到的数据,例如写入到文件或者进行其他操作
// 清空数据表对象,准备读取下一批数据
dt.Clear();
// 更新起始位置
start += batchSize;
}
}
}
```
在上述代码中,我们通过设置 `batchSize` 变量的值,来控制每次读取的数据量。在循环读取数据时,我们通过在 SQL 语句中添加 `OFFSET` 和 `FETCH NEXT` 子句来指定起始位置和读取数量。每次读取完毕后,我们可以对读取到的数据进行处理,例如写入到文件或者进行其他操作。最后,我们需要清空数据表对象并更新起始位置,准备读取下一批数据。
阅读全文