Access mit C#

24/05/2009 - 03:20 von Stephan Stone | Report spam
Hallo zusammen

Hab ein Frage zu Datenbankzugriff Access mit C#.

Bisher nutze ich eigentlich eine recht hàndische Methode um Daten zu
schreiben und zu lesen.
Dabei àrgert mich das Thema Parameter für OleDBCommand.

Hab das bisher etwa so gemacht:

...
OleDBCommand cmdDB = new OleDbCommand();

cmdDB.CommandText = "INSERT INTO tab1 (ID_Main, LinienName, StationN) VALUES
(@ID_Main, @LinienName, @StationN)";
cmdDB.Parameters.Add("@ID_Main", OleDbTyp.Integer).Value = IDMain;
...

Das Funktioniert auch, allerdings bin ich mir zimlich sicher, dass der
Parametername nicht verwendet wird, sondern die Parameter einfach der reihe
nach eingesetzt werden. Also wenn ich jetzt erst @LinienName deffiniert
hàtte, würde der Parameter in @ID_Main eingesetzt.
Ich würde das ja verstehen wenn ich den INSERT Befehl mit ? abàndere. (Hab
ich irgendwo gelesen, dass ? der Platzhalter bei Access sein soll)
Ich würde jetzt gerne das ganze mit dem Namen zuordnen. Geht das irgendwie?
Oder muss ich die Reihenfolge immer einhalten und damit leben?

Danke für die Antworten.




Noch kurze Frage:
Hab bisher eigentlihc alles mit SQL Befehlen bearbeitet wie oben schon
erwàhnt.
Kann mir aber nciht vorstellen, dass es nicht einfacher gehen soll.
Ich brauche in meinem Programm zugriff auf die Daten einer recht
übersichtlichen Access Tabelle.
Gibts da die Möglichkeit das ganze in eine Struktur zu überführen, mit der
mann dann in C# arbeiten kann wie mit einem Array?
Also ich will kein Grafisches Grind oder sowas erstellen. Die Daten werden
von einem Programm grafisch ausgewertet und dargestellt.
Die Rohdaten der DB soll keiner sehen.

Habt ihr da einen Tip?


Danke nochmal

MFG

Stephan
 

Lesen sie die antworten

#1 Josef Poetzl
24/05/2009 - 10:34 | Warnen spam
Hallo!

Stephan Stone schrieb:
[...]
OleDBCommand cmdDB = new OleDbCommand();

cmdDB.CommandText = "INSERT INTO tab1 (ID_Main, LinienName, StationN) VALUES
(@ID_Main, @LinienName, @StationN)";
cmdDB.Parameters.Add("@ID_Main", OleDbTyp.Integer).Value = IDMain;
...

Das Funktioniert auch, allerdings bin ich mir zimlich sicher, dass der
Parametername nicht verwendet wird, sondern die Parameter einfach der reihe
nach eingesetzt werden.



Der OLEDB-Provider unterstützt keine benannten Parameter, daher wird
in der Reihenfolge befüllt, wie die Parameter erstellt werden.

http://msdn.microsoft.com/de-de/lib...35645.aspx
.. hier siehst du den Unterschied zw. SqlCommand und OleDbCommand.
(SqlCommand kennt benannte Parameter)

Also wenn ich jetzt erst @LinienName deffiniert
hàtte, würde der Parameter in @ID_Main eingesetzt.
Ich würde das ja verstehen wenn ich den INSERT Befehl mit ? abàndere. (Hab
ich irgendwo gelesen, dass ? der Platzhalter bei Access sein soll)
Ich würde jetzt gerne das ganze mit dem Namen zuordnen. Geht das irgendwie?
Oder muss ich die Reihenfolge immer einhalten und damit leben?



Zumindest bei der Parameterdefinition musst du imo die Reihenfolge
einhalten. (Die Wertzuweisung kann beliebig erfolgen.)

Prinzip:
cmdDB.CommandText =
"Parameters @P1 int, @P2 varchar(255), @P3 varchar(255);" +
" INSERT INTO tab1 (Feld1, Feld3, Feld2)" +
" VALUES (@P1, @P3, @P2)";
// die Parameterreihenfolge im Insert-Teil dürfte abweichen

// hier muss die Reihenfolge mit der Reihenfolge vom Parameters-Abschnitt übereinstimmen
OleDbParameter Parameter1 = cmdDB.Parameters.Add("@P1", OleDbType.Integer);
OleDbParameter Parameter2 = cmdDB.Parameters.Add("@P2", OleDbType.VarWChar, 255);
OleDbParameter Parameter3 = cmdDB.Parameters.Add("@P3", OleDbType.VarWChar, 255);

// die Reihenfolge der Datenzuweisung ist egal
Parameter1.Value = 123
Parameter3.Value = "Wert für Feld3"
Parameter2.Value = "Wert für Feld2"


Noch kurze Frage:
Hab bisher eigentlihc alles mit SQL Befehlen bearbeitet wie oben schon
erwàhnt.
Kann mir aber nicht vorstellen, dass es nicht einfacher gehen soll.
Ich brauche in meinem Programm zugriff auf die Daten einer recht
übersichtlichen Access Tabelle.
Gibts da die Möglichkeit das ganze in eine Struktur zu überführen, mit der
mann dann in C# arbeiten kann wie mit einem Array?



Die ADO.NET-Elemente DataTable oder OleDbDataReader passen nicht?


mfg
Josef

Ähnliche fragen