Esiste un modo per estrarre un DataRow dalla riga corrente di un DataReader ?
No, almeno non in modo semplice. Ogni DataRow appartiene a uno Table. Non puoi lasciare quella proprietà vuota, non puoi nemmeno cambiare la tabella (senza usare ImportRow).
Ma se avete bisogno di DataRows, perché non riempite uno DataTable
in primo luogo?
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)
Se si ha realmente bisogno per ottenere la riga (s) dal DataReader
è possibile utilizzare reader.GetSchemaTable
per ottenere tutte le informazioni sulle colonne:
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];
}
}
}
ma che non è realmente efficace.
fonte
2013-08-29 13:02:48
_ "Un DataReader è più un insieme di righe" _ no, è più come una vista su un singolo disco. Un 'DataReader' è un flusso forward-only per i record nel database. Puoi solo guardare il record corrente. –