【问题标题】:Procedure or function 'insert_into' expects parameter '@FirstName', which was not supplied过程或函数“insert_into”需要参数“@FirstName”,但未提供该参数
【发布时间】:2017-12-10 03:15:37
【问题描述】:

我正在尝试使用存储过程将信息传递到我的数据库,但一直收到该错误。当我测试时,我输入了一个值,但仍然没有骰子。有人可以向我解释我在这里做错了什么吗?我已经检查了拼写错误和所有这些。我不知道我做错了什么。提前致谢

存储过程:

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

【问题讨论】:

    标签: asp.net sql-server stored-procedures


    【解决方案1】:

    您将.AddWithValue 用于@FirstName(您使用它的唯一参数)-但您并没有真正调用提供值的重载(即bad idea anyway),但是您'重新指定参数的数据类型(这是一个的事情!)。所以我相信如果你将 .AddWithValue 更改为 .Add@FirstName 参数,你应该没问题

    改变这个:

    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 在 cmets 中正确指出的那样 - 您还需要告诉您的 SqlCommand 您即将调用存储过程:

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

    【讨论】:

    • 我相信objcmd.CommandType也需要设置为CommandType.StoredProcedure
    • 我确实拥有它只是 .Add 但我更改了它 .addwithvalue 来测试它并忘记将其更改回来。它给了我同样的错误@mar_s。我的代码中没有那一行
    • 设置 objcmd.CommandType = CommandType.StoredProcedure 是我所缺少的。谢谢丹:D
    猜你喜欢
    • 2015-01-25
    • 2020-12-14
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多