【发布时间】:2018-01-31 20:28:11
【问题描述】:
我正在从 SQL Server 检索大量数据。一切正常,但是当我尝试在 using 语句中关闭 IDataReader
try
{
using (SqlConnection con = new SqlConnection(connString))
{
con.Open();
using (SqlCommand command = new SqlCommand(sql_query, con))
{
command.CommandTimeout = 0;
using (IDataReader rdr = new SqlCommand(sql_query, con).ExecuteReader(CommandBehavior.SequentialAccess))
{
dataTable = GetDataTableFromDataReader(rdr);
}
....
我得到: 执行超时已过期。在操作完成之前超时时间已过或服务器没有响应。
使用 rdr = null 之类的东西会更好吗?或者还有其他更好的解决方案如何关闭 IDataReader?
【问题讨论】:
-
我怀疑处理数据读取器会导致超时。您可以完全执行
GetDataTableFromDataReader吗?你调试了吗? -
你为什么要使用
SequentialAccess?你读过巨大的二进制数据吗?这使得读取行不是一次,而是作为流,然后您可以使用GetBytes部分读取二进制文件。 -
这工作正常,但是当它离开最后一个大括号时会陷入异常。
-
是的,MSDN 上建议使用 SequentialAccess,以防数据量巨大。不是二进制数据。
-
不是庞大的数据,而是庞大的二进制数据。如果您只选择大量行,则不应使用
SequentialAccess
标签: c# .net idatareader