2017-05-23 1 views
0

Die gespeicherte Prozedur ist:Ich erhalte den Fehler "Prozedur oder Funktion 'stSelect' erwartet den Parameter '@stNo', der nicht mitgeliefert wurde."

ALTER PROCEDURE [dbo].[stSelect] 
    (@stNo INT) 
AS BEGIN 
    SELECT * 
    FROM stTable 
    WHERE stNo = @stNo 
END 

Der C# -Code ist:

private void button1_Click(object sender, EventArgs e) 
{ 
    sqlConnection1.Close(); 
    SqlCommand cmd; 
    dataSet41.Clear(); 

    cmd = new SqlCommand("stSelect", sqlConnection1); 
    cmd.Parameters.Clear(); 

    cmd.Parameters.AddWithValue("@stNo", textBox1.Text); 

    sqlConnection1.Open(); 
    cmd.ExecuteNonQuery(); 
    sqlDataAdapter1.SelectCommand = cmd; 
    sqlDataAdapter1.Fill(dataSet41); 
    sqlConnection1.Close(); 
} 

Ihnen sehr für Ihre Hilfe danken

Ali

+0

In welcher Zeile erhalten Sie den Fehler? – andrewjboyd

+1

vielleicht weil der Parameter als Int definiert ist und Sie liefern Text – pm100

Antwort

1

hinzufügen

cmd.CommandType = CommandType.StoredProcedure 

da Sie eine gespeicherte Prozedur sind aufgerufen wird. Andernfalls wird vorausgesetzt, dass "stSelect" eine SQL-Anweisung ist.

Ich bin nicht sicher, wie der Parameter interpretiert wird, da Sie es hinzufügen, ohne anzugeben, dass es eine gespeicherte Prozedur ist.

+0

Beim Öffnen der Verbindung tritt der Fehler auf, dass die Verbindung offen ist. Aber cmd.CommandType = CommandType.StoredProcedure gibt die richtige Antwort. Vielen Dank Scott Hannen. – ali

+0

Ehrfürchtig. Bitte vergessen Sie nicht, die Antwort als richtig zu markieren. –

0

Überprüfen Sie, ob der Wert in Textbox ist Nummer zuerst, wenn ja, dann den Rest der Arbeit:

private void button1_Click(object sender, EventArgs e) 
{ 
    int stNo; 
    if (!int.TryParse(textBox1.Text, out stNo)) 
    { 
     // not a number 
     return; 
    } 

    // It is a number so do the rest 

    sqlConnection1.Close(); 
    SqlCommand cmd; 
    dataSet41.Clear(); 
    cmd = new SqlCommand("stSelect", sqlConnection1); 
    cmd.Parameters.Clear(); 
    cmd.Parameters.AddWithValue("@stNo", stNo); //<-- number is expected 
    sqlConnection1.Open(); 
    cmd.ExecuteNonQuery(); 
    sqlDataAdapter1.SelectCommand = cmd; 
    sqlDataAdapter1.Fill(dataSet41); 
    sqlConnection1.Close(); 
} 
+0

Ich änderte den Code, wie Sie geschrieben haben, aber wieder habe ich diesen Fehler. Das Problem ist nicht string oder int, der Parameter wird nicht an die gespeicherte Prozedur übergeben. – ali

0

Ich glaube, Sie müssen FIRST die Verbindung öffnen. So etwas wie:

{

 sqlConnection1.Open(); 

     Using cmd as new SqlCommand("stSelect", sqlConnection1); 
      cmd.Parameters.AddWithValue("@stNo", textBox1.Text); 
      cmd.ExecuteNonQuery(); 
      sqlDataAdapter1.SelectCommand = cmd; 
      sqlDataAdapter1.Fill(dataSet41); 
      sqlConnection1.Close(); 

     End Using 
       } 
+0

Der op öffnet die Verbindung. Und wenn das der Fall wäre, wäre der Fehler anders. – CodingYoshi

Verwandte Themen