数据 reader 在传递给方法时被关闭
Data reader get closed while passing to a method
我正在尝试将数据 reader 传递给方法,但出现如下错误:
Invalid attempt to call fieldcount when reader is closed.
代码 :
public class ImportService
{
public IDataReader Reader { get; set; }
public void MyMethod()
{
string[] Tables = { "Table1", "Table2"};
foreach (var table in Tables)
{
try
{
var msSql = new MsSql(table,conn);
Reader = msSql.Reader;
msSql.Reader.Close();
DumpData(conn, Reader);
Reader.Close();
}
catch (Exception ex)
{
//catch exception here
Reader.Close();//in case of error while dumping data close the reader.
}
}
conn.close();
}
private void DumpData(SqlConnection conn, IDataReader reader) //Invalid attempt to call FieldCount when reader is closed
{
}
}
public class MsSql
{
public IDataReader Reader { get; set; }
public MsSql(string table, SqlConnection Conn)
{
GetData(table,Conn);
}
private void GetData(string table, SqlConnection Conn)
{
string query = "SELECT * FROM " + table;
using (SqlCommand cmd = new SqlCommand(query, Conn))
{
cmd.CommandTimeout = 0;
Reader = cmd.ExecuteReader();
}
}
}
我在我的全局对象 Reader 中成功地获取了数据,但是当我将它传递给我的 dumpdata 方法时,我得到了一个错误。
我已经检查了以下问题,但它们对我目前的情况没有帮助:
Invalid attempt to call FieldCount when reader is closed
asp.net Invalid attempt to FieldCount when reader is closed error
Update:当我将 msSql.Reader
传递给 Dumpdata 时,一切正常,如下所示:
DumpData(conn, msSql.Reader);
你正在做的是这个:
- 检索 Reader
Reader = msSql.Reader;
- 关闭 self-same Reader
msSql.Reader.Close();
- 正在尝试从现已关闭的 Reader 中读取数据:
DumpData(conn, Reader)
所以您正在尝试从封闭的 reader 中读取(这大概是 DumpData()
所做的 - 并获得相应的消息。
我认为您在 mis-apprehension 下工作,即通过将同一对象分配给另一个变量,您正在创建另一个对象。事实并非如此。你只是从不止一点引用它。
所以:msSql.Reader
和本地Reader
指的是同一个对象
我正在尝试将数据 reader 传递给方法,但出现如下错误:
Invalid attempt to call fieldcount when reader is closed.
代码 :
public class ImportService
{
public IDataReader Reader { get; set; }
public void MyMethod()
{
string[] Tables = { "Table1", "Table2"};
foreach (var table in Tables)
{
try
{
var msSql = new MsSql(table,conn);
Reader = msSql.Reader;
msSql.Reader.Close();
DumpData(conn, Reader);
Reader.Close();
}
catch (Exception ex)
{
//catch exception here
Reader.Close();//in case of error while dumping data close the reader.
}
}
conn.close();
}
private void DumpData(SqlConnection conn, IDataReader reader) //Invalid attempt to call FieldCount when reader is closed
{
}
}
public class MsSql
{
public IDataReader Reader { get; set; }
public MsSql(string table, SqlConnection Conn)
{
GetData(table,Conn);
}
private void GetData(string table, SqlConnection Conn)
{
string query = "SELECT * FROM " + table;
using (SqlCommand cmd = new SqlCommand(query, Conn))
{
cmd.CommandTimeout = 0;
Reader = cmd.ExecuteReader();
}
}
}
我在我的全局对象 Reader 中成功地获取了数据,但是当我将它传递给我的 dumpdata 方法时,我得到了一个错误。
我已经检查了以下问题,但它们对我目前的情况没有帮助:
Invalid attempt to call FieldCount when reader is closed
asp.net Invalid attempt to FieldCount when reader is closed error
Update:当我将 msSql.Reader
传递给 Dumpdata 时,一切正常,如下所示:
DumpData(conn, msSql.Reader);
你正在做的是这个:
- 检索 Reader
Reader = msSql.Reader;
- 关闭 self-same Reader
msSql.Reader.Close();
- 正在尝试从现已关闭的 Reader 中读取数据:
DumpData(conn, Reader)
所以您正在尝试从封闭的 reader 中读取(这大概是 DumpData()
所做的 - 并获得相应的消息。
我认为您在 mis-apprehension 下工作,即通过将同一对象分配给另一个变量,您正在创建另一个对象。事实并非如此。你只是从不止一点引用它。
所以:msSql.Reader
和本地Reader
指的是同一个对象