verwendetes Datenbanksystem: <SQL Server 2005>
Hi,
ich probiere die ganze Zeit einer Stored Procedure zwei Werte zu übergeben. In meinem Reader Objekt sind auch zwei drin aber es kommt trotzdem immer eine Fehlermeldung.
Meine Stored Procedure in der DB sieht so aus:
ALTER PROCEDURE [dbo].[thesis_select_Station]
@ort varchar(50),
@transport varchar(50)
AS
BEGIN
SELECT S.ort, P.transport, P.platz FROM test AS S, test1 AS P WHERE S.ort = @ort AND P.parent = @ort AND P.transport= @transport
END
In C# probiere ich das ganze folgendermaßen aufzurufen:
int spalten_nr = 1;
string storedProcedure = elementtyp.Attributes["SelectStatements"].InnerText.ToString();
SqlCommand sqlCommand = new SqlCommand(storedProcedure, ConnectionOptionen.verb);
sqlCommand.CommandType = CommandType.StoredProcedure;
sqlCommand.Parameters.Add(ortskoordinateForm.dbName, SqlDbType.VarChar, 100);
sqlCommand.Parameters[ortskoordinateForm.dbName].Value = ortskoordinateForm.wertdesParameters.Text.ToString();
sqlCommand.Parameters.Add(transport.dbName, SqlDbType.VarChar, 100);
sqlCommand.Parameters[transport.dbName].Value = transport.getWertDesParameters().Text.ToString();
SqlDataReader reader = sqlCommand.ExecuteReader();
while (reader.Read())
{
foreach (Control controlread in this.Controls)
{
ParameterForm parameterFormRead = controlread as ParameterForm;
OrtskoordinateParameter ortskoordinateFormRead = controlread as OrtskoordinateParameter;
if (parameterFormRead != null)
{
if (parameterFormRead.dbName == reader.GetName(spalten_nr))
{
parameterFormRead.getWertDesParameters().Text = reader.GetValue(spalten_nr).ToString();
spalten_nr++;
}
}
}
}
reader.Close();
Es kommt immer die Fehlermeldung das die Stored Procedure noch einen Wert für transport benötigt. Aber ich übergebe ihm doch einen.
Kann mir jemand vielleicht erklären, was ich falsch mache?
LG
sailer
na bist du denn sicher, dass transport.dbName richtigen namen hat? also in dem fall "trasnport"
bzw. vllt. liegts auch daran, dass die feldergrößen in der sp mit 50 eigegeben sind, deine parameter aber mit 100. dass es daran liegt, bezweifle ich aber..
Hi,
sorry das war nur ein Rechtschreibfehler. Aber an dem lag es nicht und das Problem das es in der stored procedure varchar 50 ist und in c# varchar 100 liegt es auch nicht. das habe ich auch schon ausprobiert.
Hat sonst noch einer eine Idee an was es liegen könnte?
LG
sailer
Stimmen die Namen 100%ig überein? (eventuell fehlt dir das @Zeichen)
Ansonsten is doch .Add veraltet oder? Warum verwendest du nicht AddWithValue?
lg Lion
lg Lion
apropos 100%-Übereinstimmung. kleiner hinweis: "@" gehört nicht zu dem namen. prüfe das auch mal.
kleiner hinweis: "@" gehört nicht zu dem namen. prüfe das auch mal.
hm, das wußte ich auch nicht, da ich es immer mit dem Zeichen verwende und es funktioniert? Aber wie gesagt, ich verwende AddWithValue, könnte es daran liegen?
lg
lg Lion
Hi,
danke für die Antworten. Also ich habe die Stored Procedure in der DB ausgeführt und dort funktioniert sie wunderbar. Also kann meiner Meinung da kein Fehler liegen. Es habert einfach nur bei der übergabe von c#. Ich habe die Methode AddWithValue ausprobiert aber mein Fehler löst sich dadurch nicht.
Ich habe das ganze mal debuggt im sqlCommand hat er zwei Parameter. Aber sobald er an SqlDataReader reader = sqlCommand.ExecuteReader() kommt zeigt er mir den Fehler "Fehler bei der Funktion ... @transport wird erwartet aber nicht geliefert".
Habe ihr noch ideen woran es liegen könnte?
LG
sailer
Hi,
in transport.dbName steht der Name der Datenbank. In diesem Fall Transportschluessel. Und in transport.getWertDesParameters().Text.ToString(); steht der Wert drin.
lg
du fügst do den parameter an. und der heißt in der sp "transport" also muss der dbName "transport" heißen, nix anderes
sqlCommand.Parameters.Add("transport", SqlDbType.VarChar, 100);
sqlCommand.Parameters[transport.dbName].Value = transport.getWertDesParameters().Text.ToString();
Hi,
es funktioniert 👍 Du hattest recht. Der zu übergebene Name muss genause heißen wie der dbName. Man war das eine schwere Geburt. Bis man darauf mal kommt. Aber vielen vielen lieben Dank euch allen.
LG
sailer 😁
Hi,
es funktioniert 👍 Du hattest recht. Der zu übergebene Name muss genause heißen wie der dbName. Man war das eine schwere Geburt. Bis man darauf mal kommt. Aber vielen vielen lieben Dank euch allen.
LG
sailer 😄
hast du denn meine erste Post gar nicht gelesen? Stored Procedure - Übergabe von mehreren Parametern
😭
Hi,
doch die hatte ich gelesen. Aber ich dachte nicht, dass ich den Namen den ich übergebe genauso heißen muss wie der Datenbankname. Ich dachte es wäre egal, wenn sie unterschiedlich heißen. Also irgendwie hatte ich das verpeilt.
Aber danke. 😁
Lg
sailer