Danke, das hatte ich auch angenommen:
Zitat von
dataspider:
Hi,
multiple rows in singleton select kommt vom Interbase Server und besagt,
dass du irgendwo einen Select hast, der nur einen Wert liefern darf, aber mehrere Records liefert.
Wenn 2 Datensätze im Feld den Wert habe, weiss die
DB nicht, welche ID sie dir nun senden soll.
Somit würde ich in der Procedure schauen...
Frank
Ich habe die Stored Procedure in meiner Anfrage bereits angegeben:
Es gibt
eine einzige Anweisung, die
neu_ID etwas zuweist.
Es gibt
zwei Anweisungen, die
Neuer_Monat etwas zuweist.
Es gibt erst danach
eine einzige SUSPEND-Anweisung.
Wieso soll Interbase glauben, dass
multiple rows zurückgeliefert werden?
1. Ersatzversuch:
SELECT * FROM Logbuch_Start (0, 0, 0)
aufgerufen durch C# (ursprünglich cmdUpdate, jetzt cmdSelect):
Code:
sCommand = "SELECT * FROM Logbuch_Start";
cmdSelect.Parameters.Clear();
cmdSelect.Parameters.Add(new BdpParameter("Daten_Nr", BdpType.Int32, 0));
cmdSelect.Parameters.Add(new BdpParameter("Selektion_Nr", BdpType.Int32, 0));
cmdSelect.Parameters.Add(new BdpParameter("Formular_Nr", BdpType.Int32, 0));
...
cmdSelect.CommandText = sCommand;
tblResults.Rows.Clear();
Connect.Open();
Adapter.Fill(ds, tblResults.TableName);
Dies liefert die
Interbase-Fehlermeldung:
Zitat:
parameter mismatch for procedure LOGBUCH_START
2. Ersatzversuch:
Aufruf durch C#:
Code:
sCommand = "SELECT * FROM Logbuch_Start(0,0,0)";
cmdSelect.Parameters.Clear();
// keine Parameter ausdrücklich eingetragen
// Aufruf wie beim 1. Ersatzversuch
Dies liefert
keine Fehlermeldung, aber die
Procedure wird nicht ausgeführt, und es gibt die Rückgabewerte (null, true) statt (3, true); der Parameter neu_ID kann - siehe
SQL-Quelltext - niemals als null zurückgegeben werden.
Also Problem:
Wie kann ich mit BdpProvider eine Stored Procedure aufrufen, die Parameter will und Werte zurückgibt? Wie kann ich die Rückgabewerte auslesen? (Der Weg über tblResults und Adapter ist nur eine schnelle Ersatzlösung, aber nicht wirklich sinnvoll.)
Hilfe! Jürgen