Ich versuche, Datenleser an eine Methode zu übergeben, aber Fehler immer wie unten:Datenleser geschlossen erhalten, während ein Verfahren vorbei
ungültiger Versuch Fieldcount zu rufen, wenn Leser geschlossen ist.
-Code:
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();
}
}
}
Ich bin erfolgreich Daten in meinen globalen Objekt Reader bekommen, aber wenn ich es meine DumpData Methode übergeben bekomme ich einen Fehler.
Ich habe überprüft bereits die folgenden Fragen, aber sie konnten mir nicht helfen, mit meinem aktuellen Szenario:
aktualisieren: Wenn Ich übergebe msSql.Reader
zu Dumpdata dann funktioniert alles gut wie unten:
DumpData(conn, msSql.Reader);
Nun, Sie schließen den 'SqlCommand' in' GetData' ... Wie haben Sie erwartet, Daten aus dem geschlossenen Befehl lesen zu können? –
@JonSkeet: Aber ich erhalte Datensätze erfolgreich in meinem msSql.Reader und wenn ich msSql.Reader zu DumpData-Methode übergeben, funktioniert es –