2017-12-10 3 views
0

Ich versuche, Informationen an meine Datenbank mit einer gespeicherten Prozeduren zu übergeben, aber immer noch diesen Fehler zu bekommen. Beim Test habe ich einen Wert eingegeben aber immer noch keinen Würfel. Kann mir bitte jemand erklären, was ich hier falsch mache? Ich habe nach Rechtschreibfehlern und all dem gesucht. Ich habe keine Ahnung, was ich falsch gemacht habe. Vielen Dank im VorausProzedur oder Funktion 'insert_into' erwartet den Parameter '@FirstName', der nicht geliefert wurde

Stored Procedure:

ALTER PROCEDURE [dbo].[insert_into] 
    (@FirstName varchar(20), 
    @LastName varchar(20), 
    @Email varchar(50), 
    @caldate1 date, 
    @caldate2 date, 
    @id int output) 
AS 
BEGIN 
    INSERT INTO customers (FirstName, Lastname, Email, caldate1, caldate2) 
    VALUES (@FirstName, @LastName, @Email, @caldate1, @caldate2) 

    SET @id = SCOPE_IDENTITY() 
    RETURN @id 
END 

ASPX-Markup:

<asp:TextBox ID="Firstname" runat="server"></asp:TextBox> 
<asp:TextBox ID="Lastname" runat="server"></asp:TextBox> 
<asp:TextBox ID="email" runat="server"></asp:TextBox> 

<asp:Button ID="btnSubmit" runat="server" Text="go" OnClick="btnSubmit_Click" /> 
<asp:Label ID="lbloutput" runat="server"></asp:Label> 

Server-Side-Code:

protected void btnSubmit_Click(object sender, EventArgs e) 
{ 
    string conn = ""; 
    conn = ConfigurationManager.ConnectionStrings["Conn"].ToString(); 

    SqlConnection objsqlconn = new SqlConnection(conn); 

    try 
    { 
     if (Firstname.Text != " ") 
     { 
      objsqlconn.Open(); 

      SqlCommand objcmd = new SqlCommand("insert_into", objsqlconn); 
      SqlParameter id = objcmd.Parameters.Add("@id", SqlDbType.Int); 
      id.Direction = ParameterDirection.Output; 

      SqlParameter FirstName = objcmd.Parameters.AddWithValue("@FirstName", SqlDbType.VarChar); 
      FirstName.Value = Firstname.Text; 

      SqlParameter LastName = objcmd.Parameters.Add("@LastName", SqlDbType.VarChar); 
      LastName.Value = Lastname.Text;      

      SqlParameter Email = objcmd.Parameters.Add("@Email", SqlDbType.VarChar); 
      Email.Value = email.Text; 

      SqlParameter caldate1 = objcmd.Parameters.Add("@caldate1", SqlDbType.Date); 
      DateTime dt = Convert.ToDateTime(startDate.Text, new CultureInfo("en-US")); 
      caldate1.Value = dt.Date; 

      SqlParameter caldate2 = objcmd.Parameters.Add("@caldate2", SqlDbType.Date); 
      DateTime dt2 = Convert.ToDateTime(endDate.Text, new CultureInfo("en-US")); 
      caldate2.Value = dt2.Date; 

      objcmd.ExecuteNonQuery(); 

      //Response.Redirect("Default.aspx"); 
      lbloutput.Text = "Record inserted successfully. ID = " + id.Value.ToString(); 
     } 
    } 
    catch (Exception ex) 
    { 
     Response.Write(ex.Message.ToString()); 
    } 
    finally 
    { 
     objsqlconn.Close(); 
    } 
} 

Antwort

1

Sie .AddWithValue für @FirstName (der einzige Parameter verwenden Sie Verwenden Sie dies für) - aber Sie rufen nicht wirklich eine Überladung, die eine bietet Wert (das ist ein bad idea anyway), aber Sie geben den Datentyp des Parameters (das ist eine gute Sache!). Ich glaube also, wenn Sie die .AddWithValue jsut .Add für den Parameter @FirstName ändern, sollten Sie diese feine

ändern sein:

SqlParameter FirstName = objcmd.Parameters.AddWithValue("@FirstName", SqlDbType.VarChar); 
FirstName.Value = Firstname.Text; 

zu:

SqlParameter FirstName = objcmd.Parameters.Add("@FirstName", SqlDbType.VarChar); 
FirstName.Value = Firstname.Text; 

Update: als @DanGuzman zeigt richtig in den Kommentaren - Sie müssen auch Ihre SqlCommand sagen, dass Sie im Begriff sind, eine gespeicherte Prozedur aufzurufen:

SqlCommand objcmd = new SqlCommand("insert_into", objsqlconn); 
objcmd.CommandType = CommandType.StoredProcedure;  
+2

Ich glaube, 'objcmd.CommandType' muss auch auf' CommandType.StoredProcedure' gesetzt werden. –

+0

@DanGuzman: Ja, absolut richtig - das auch! –

+0

Ich hatte es als nur .Add, aber ich änderte es .addwithvalue, um es zu testen und vergaß es zurück zu ändern. Es gab mir den gleichen Fehler @mar_s. Ich habe diese Zeile nirgends in meinem Code –

Verwandte Themen