Parameter bei Stored Procedures in MySQL 5

cremor

Grünschnabel
Ich versuche in einem DataGridView eine View anzuzeigen und auch zu verändern.
Das Anzeigen ist ja kein Problem, das Ändern aber leider schon :(

Ich habe schon verschiedene Varianten versucht, doch ich habe immer den Fehler, dass er die Parameter nicht findet.

Die Spalten in der DataGridView heißen genau so wie die Spalten in der Datenbank (per typed DataSet übernommen).

Aufruf als StoredProcedure, wie ich in diversen Howtos gelesen habe:
C#:
dataAdapter.InsertCommand = new MySqlCommand("new_kunde", this.dbConnection);
dataAdapter.InsertCommand.CommandType = CommandType.StoredProcedure;
Aufruf als normaler SQL-Text:
C#:
dataAdapter.InsertCommand = new MySqlCommand("CALL new_kunde(?Vorname, ?Nachname [...]", this.dbConnection);
Bei beiden Varianten tritt eine Exception auf (Parameter nicht definiert).

Ich habe auch den Befehl
C#:
dataAdapter.InsertCommand.Prepare();
gefunden. Was der aber tut ist mir noch nicht ganz klar :(

Die Veränderungen in der DataGridView will ich ganz normal per
C#:
dataAdapter.Update(dataSet, tableName);
speichern.


Nochmal kurz:
Wie bekomme ich die Daten aus dem DataGridView als Parameter in den SQL-Befehl?

Ist das soweit OK und muss ich nur noch die Parameter hinbiegen?
Oder muss man das ganz anders machen? (Ich habe es zuerst mit 2 Insert-Befehlen (die View geht über 2 Tabellen) als InsertCommand probiert, aber da hat er immer einen Fehler in der SQL-Syntax gemeldet :( ).

Update und Delete habe ich noch gar nicht versucht, zuerst sollte mal Insert funktionieren :rolleyes:

Ich verwende:
  • MySQL 5.0.18-nt
  • MySQL Connector/Net 1.0.7
  • Visual Studio 2005

mfg cremor
 
Zuletzt bearbeitet:

cremor

Grünschnabel
Ich habe jetzt hier folgendes gefunden:
Code:
UPDATE EMP SET EMPNO = ?, ENAME = ?, JOB = ?, MGR = ?, HIREDATE = ?, SAL = ?, COMM = ?, DEPT = ? WHERE EMPNO = ?

Dieses Prinzip (nur '?') funktioniert aber auch nicht. Mit
C#:
dataAdapter.InsertCommand.Prepare();
kommt der Fehler: "A MySqlParameter with ParameterName '?' is not contained by this MySqlParameterCollection."
und ohne Prepare kommt: "Parameter '?' must be defined"

Übrigens funktioniert es auch nicht, wenn ich den generierten Code eines MySqlCommandBuilders selbst verwende. Der CommandBuilder macht anscheinend noch weitere Dinge.
Und eben diese weiteren Dinge (das Mappen einer Spalte auf einen Parameter) würde ich gerne selber machen, ich weiß nur nicht wie.

mfg cremor
 
Zuletzt bearbeitet: