2017-12-10 14 views
0

ストアドプロシージャを使用してデータベースに情報を渡そうとしていますが、そのエラーが発生し続けます。私がテストするとき、私は値を入力しましたが、ダイスはまだありません。誰かがここで間違っていることを私に説明してもらえますか?私はスペルミスやそのすべてをチェックしました。私は何が間違っていたのか分かりません。事前に感謝プロシージャまたは関数 'insert_into'には、パラメータ '@FirstName'が指定されていません。

ストアドプロシージャ:

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マークアップ:

<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> 

サーバー側のコード:

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(); 
    } 
} 

答えて

1

あなたは@FirstNameため.AddWithValue(唯一のパラメータあなたを使用していますこれを使用しています) - しかし、実際には値(これはbad idea anyway)ですが、パラメータのデータ型を指定しています(は良いです)。

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

へ:

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

更新: @DanGuzmanとしてSO私はあなたが@FirstNameパラメータに.Addをjsutする.AddWithValueを変更した場合、あなたはこの

変更問題ないはずと信じてコメント内で正しく指摘する - SqlCommandに、ストアドプロシージャを呼び出すことを伝える必要があります。

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

私は 'objcmd.CommandType'も' CommandType.StoredProcedure'に設定する必要があると思います。 –

+0

@DanGuzman:はい、絶対に正しい - それも! –

+0

私はちょうどそれを持っていました。しかし、私はそれをテストするために.addwithvalueを変更し、それを元に戻すのを忘れました。それは私に同じエラー@mar_sを与えました。私はコード内のどこにでもその行を持っていません –

関連する問題