Entwickler-Ecke

WinForms - Wert aus einem DataReader mit Typ in DataRow abspeichern


erfahrener Neuling - Mo 02.05.16 12:18
Titel: Wert aus einem DataReader mit Typ in DataRow abspeichern
Hallo,

wie aus diesem Thread [http://www.entwickler-ecke.de/viewtopic.php?t=115438url] hier schon hervor ging, habe ich einen DataReader, welcher aus einem command erzeugt wurde und Daten ausließt.
Wenn ich die Werte nach Typ abfrage, funktioniert das auch. Nur wenn ich danach die DataRow ausgebe, sind diese Typen dann nicht mehr erhalten:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
using (FbDataReader reader = command.ExecuteReader(CommandBehavior.Default))
{
    while (reader.Read())
    {
        row = table.NewRow();
        for (int i = 0;i < reader.FieldCount;i++)
        {
            if (reader.GetValue(i) is DateTime)
                row[i.ToString()] = reader.GetDateTime(i);
            else if (reader.GetValue(i) is double)
                row[i.ToString()] = reader.GetDouble(i);
            else
                row[i.ToString()] = reader.GetValue(i);
    }
}
Die table besteht aus reader.FieldCount-Anzahl-Spalten, die von 0 beginnend durchnummeriert sind (deswegen row[i.ToString()).

Woran liegt es? Liegt es an den row-Eigenschaften oder an der Table oder woran???
Vielen Dank für eure Antworten


Ralf Jansen - Mo 02.05.16 12:53

Warum nimmst du einen FBDataReader um Daten in eine DataTable zu füllen (sieht für mich so aus als wäre table eine DataTable) und nicht einfach einen FbDataAdapter?


erfahrener Neuling - Mo 02.05.16 12:56

Das hatte ich am Anfang auch probiert. Allerdings hab ich keinen weg gefunden, einen DataAdapter mit einem command zu verknüpfen.
Ich brauche nämlich diesen command

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
FbCommand command = connection.CreateCommand();
command.CommandType = CommandType.StoredProcedure;
command.CommandText = procedureName;
//Parameter hinzufügen, falls vorhanden
if (parameters != null)
    for (int i=0; i<parameters.GetLength(0); i++)
        command.Parameters.AddWithValue(parameters[i,0],parameters[i,1]);


erfahrener Neuling - Mo 02.05.16 12:58

Ok halt. Das geht ja doch, hatte scheinbar Tomaten auf den Augen :autsch:


erfahrener Neuling - Mo 02.05.16 13:11

EDIT: funzt doch alles
richtige Lösung:

C#-Quelltext
1:
2:
FbDataAdapter adapter = new FbDataAdapter(command);
adapter.Fill(table);