Czy istnieje sposób na wyodrębnienie DataRow z bieżącego wiersza obiektu DataReader ?
Nie, przynajmniej nie ma prostego sposobu. Każdy DataRow należy do jednego Table. Nie możesz zostawić tej właściwości pustej, nie możesz nawet zmienić tabeli (bez użycia ImportRow).
Ale jeśli potrzebujesz programu DataRows, dlaczego w pierwszej kolejności nie musisz wypełniać numeru DataTable
?
DataTable table = new DataTable();
using(var con = new SqlConnection("...."))
using(var da = new SqlDataAdapter("SELECT ... WHERE...", con))
da.Fill(table);
// now you have the row(s)
Jeśli naprawdę potrzebujesz, aby wiersz (y) z DataReader
można użyć reader.GetSchemaTable
, aby uzyskać wszystkie informacje o kolumnach:
if (reader.HasRows)
{
DataTable schemaTable = reader.GetSchemaTable();
DataTable data = new DataTable();
foreach (DataRow row in schemaTable.Rows)
{
string colName = row.Field<string>("ColumnName");
Type t = row.Field<Type>("DataType");
data.Columns.Add(colName, t);
}
while (reader.Read())
{
var newRow = data.Rows.Add();
foreach (DataColumn col in data.Columns)
{
newRow[col.ColumnName] = reader[col.ColumnName];
}
}
}
Ale to nie jest naprawdę skuteczny.
_ „DataReader jest bardziej zbiorem wierszy” _ nie, to bardziej jak widok na jednej płycie. 'DataReader' jest strumieniem typu" forward "do zapisów w bazie danych. Możesz tylko patrzeć na bieżący rekord. –