DataRow, Feld-Objekte

01/04/2009 - 20:26 von Joachim Pimiskern | Report spam
Hallo,

bei Delphi kann man auf die Felder einer Zeile per FieldByName()
zugreifen. Bei Delphi hat die Tabelle einen impliziten Verweis
auf eine einzige - die aktuelle - Datensatzzeile.

Man schreibt (tbl ist vom Typ TTable):

s := tbl.FieldByName('NAME').AsString;

In C# ist die Zeile explizit (dr vom Typ DataRow):

s = (string)dr["NAME"];

FieldByName ist ineffizient und obige C#-Methode auch.
Bei Delphi kann ich sagen:

var f: TStringField;
begin
// Ein einziges Mal Feld-Objekt festlegen
f := tbl.FieldByName('NAME');

// Beliebig oft, z.B. in Schleifen:
s := f.Value;
end;

Gibt's in C# auch die Möglichkeit, auf die Feld-Objekte
einer DataRow zuzugreifen?

Grüße,
Joachim
 

Lesen sie die antworten

#1 Frank Dzaebel
01/04/2009 - 20:52 | Warnen spam
Hallo Joachim,

bei Delphi kann man auf die Felder einer Zeile per FieldByName()
zugreifen.



ja klar.
Aber effizienter und typsicherer sind zum
Beispiel die über stark typisierte DataSets:

// Zum Projekt DataSet "Daten" zufügen
// DataTable "Benutzer" erzeugen mit
// string-Spalte "Name" und int-Spalte "Alter"
Daten ds = new Daten();
ds.Benutzer.AddBenutzerRow("Frank", 42);
ds.Benutzer.AddBenutzerRow("Joachim", 31);
int alter = ds.Benutzer[1].Alter;
string name = ds.Benutzer[1].Name; // ...

Dann hat man maximal effizienten Zugriff und
kann sich auch nicht bei den Strings verschrieben.



Bei Delphi hat die Tabelle einen impliziten Verweis
auf eine einzige - die aktuelle - Datensatzzeile.



Das hat man in .NET über das hostende Control,
oder zum Beispiel den "BindingSource.Position".



Gibt's in C# auch die Möglichkeit, auf die Feld-Objekte
einer DataRow zuzugreifen?



Ja klar. In C# (auch andere .NET Sprachen) gibt
es wenig Grenzen:

DataRow dr = ds.Benutzer[1];
name = dr["Name"].ToString();
alter = (int)dr["Alter"];


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen