存储过程或函数期望但未提供该参数(Stored procedure or function expe

2019-07-19 02:48发布

我试图通过调用存储过程来将数据插入SQL Server数据库,但我得到的错误

*过程或函数“插入”预计参数“@Emp_no”,但未提供*

我的存储过程称为Insertion 。 我已经彻底检查,并没有任何参数也不见了我已经通过使用标签检查它。 标签显示的价值,但我不知道为什么我收到错误。

我的代码

    try
    {
        SqlCommand cmd = new SqlCommand();
        cmd.Parameters.Clear();
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = "Insertion";
        cmd.Connection = con;

        if (rdb_Male.Checked)
        {
            int @Emp_no = Convert.ToInt32(txtbx_Empno.Text);
            string @Emp_name = txtbx_Emp_Name.Text;
            double @phone = Convert.ToDouble(txtbx_Phone.Text);
            string @Email = txtbx_Email.Text;
            string @Password = txtbx_Pwd.Text;
            string @Gender = rdb_Male.Text;
            DateTime @Dob = Convert.ToDateTime(dob);
            string @Address = txtbx_Address.Text;
            string @Designation = txtbx_Designation.Text;
            string @Qualification = txtbx_Qual.Text;
            double @Experience = Convert.ToDouble(txtbx_Exp.Text);
            double @Salary = Convert.ToDouble(txtbx_Sal.Text);
            DateTime @Doj = Convert.ToDateTime(doj);
        }
        else if (rdb_Female.Checked)
        {
            int @Emp_no = Convert.ToInt32(txtbx_Empno.Text);
            string @Emp_name = txtbx_Emp_Name.Text;
            double @phone = Convert.ToDouble(txtbx_Phone.Text);
            string @Email = txtbx_Email.Text;
            string @Password = txtbx_Pwd.Text;
            string @Gender = rdb_Female.Text;
            DateTime @Dob = Convert.ToDateTime(dob);
            string @Address = txtbx_Address.Text;
            string @Designation = txtbx_Designation.Text;
            string @Qualification = txtbx_Qual.Text;
            double @Experience = Convert.ToDouble(txtbx_Exp.Text);
            double @Salary = Convert.ToDouble(txtbx_Sal.Text);
            DateTime @Doj = Convert.ToDateTime(doj);
        }

        if (con.State==ConnectionState.Closed)
            con.Open();

        LABEL.Text = txtbx_Empno.Text;

        cmd.ExecuteNonQuery();

        lbl_Errormsg.Visible = true;
        lbl_Errormsg.Text = "Record Inserted Successfully";

        con.Close();
    }

和存储过程是

ALTER PROCEDURE dbo.Insertion
(
@Emp_no int,
@Emp_name varchar(30),
@phone numeric(10,0),
@Email varchar(30),
@Password varchar(10),
@Gender varchar(6),
@Dob date,
@Address varchar(100),
@Designation varchar(20),
@Qualification varchar(20),
@Experience numeric(4,2),
@Salary numeric(10,2),
@Doj date
)
AS
 Begin
   Insert into Register (Emp_no, Emp_name, phone, Email, Password, Gender, Dob, Address, Designation, Qualification, Experience, Salary, Doj)
   Values(@Emp_no, @Emp_name, @phone, @Email, @Password, @Gender, @Dob, @Address, @Designation, @Qualification, @Experience, @Salary, @Doj)
 End

请帮我。 提前致谢。

Answer 1:

您需要使用SqlCommand.Parameters.AddWithValue

cmd.Parameters.AddWithValue("@ParameterName", value);

SqlCommand.Parameters.Add用于其他的数据类型:

cmd.Parameters.Add("@ParameterName", SqlDbType.Int, 5);
cmd.Parameters["@ParameterName"].Value = value;

SqlCommand.Parameters.AddWithValue取代的暧昧超载Add的是使用一个字符串和对象参数。 请参阅MSDN的更多信息。



Answer 2:

只是一个平视,它可能会救一个人有很多时间自我反省的。 如果你已经在这里遵循的建议,就像为了使用AddWithValue传递一个参数,则你所拥有的一切验证,但您仍然收到错误消息“不供应”,请检查您是否已经设置了命令对象的CommandType属性到CommandType.StoredProcedure。

未设置此属性会带来同样的消息,相信我! 希望它可以帮助别人。



Answer 3:

您的插入存储过程期待@Emp_no (连同约15其他参数)。 你不能调用存储过程,而不传递参数。

看看这个网站以供参考:

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparametercollection.addwithvalue.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-2

无论你要定义变量,使用Parameters.AddWithValue代替:

cmd.Parameters.AddWithValue("@Emp_no ", Convert.ToInt32(txtbx_Empno.Text));


Answer 4:

您需要使用这样的:

cmd.Parameters.AddWithValue("@Emp_no", @Emp_no);
cmd.Parameters.AddWithValue("@Emp_name", @Emp_name);
cmd.Parameters.AddWithValue("@phone", @phone);
cmd.Parameters.AddWithValue("@Email", @Email);
cmd.Parameters.AddWithValue("@Password", @Password);
cmd.Parameters.AddWithValue("@Gender", @Gender);
cmd.Parameters.AddWithValue("@Dob", @Dob);
cmd.Parameters.AddWithValue("@Address", @Address);
cmd.Parameters.AddWithValue("@Designation", @Designation);
cmd.Parameters.AddWithValue("@Experience", @Experience);
cmd.Parameters.AddWithValue("@Salary", @Salary);
cmd.Parameters.AddWithValue("@Doj", @Doj);

否则,它会抛出异常的每个参数。



Answer 5:

对于其他人:我刚刚遇到了同样的错误,因为我的参数之一为空。 我们需要检查,因为这样的:

command.Parameters.AddWithValue("Features", (object)productDb.Features ?? DBNull.Value);


Answer 6:

“只有多数民众赞成废弃的一个Add方法,接受参数名称和值的对象,一个字符串的方法。正如你指出,你应该叫AddWithValue而不是为这种情况。”

http://social.msdn.microsoft.com/Forums/en-US/15bb16a4-0cf1-4289-b677-3b9d98f09298/parametersaddwithvalue-output-parameter-in-adonet-2?forum=adodotnetdataproviders

并非所有的Parameter.Add方法计提折旧。 你是如何想使OUTPUT参数? 你必须使用Parameter.Add这一点。



Answer 7:

这是它是如何做

using (var cmd = new SqlCommand("STORED_PROCEDURE_NAME", SqlConnection))
{
     cmd.CommandType = CommandType.StoredProcedure;
     cmd.Parameters.AddWithValue("@PARAM_NAME", PARAM_VALUE);
}

请注意, AddWithValueCommandType.StoredProcedure都是必不可少的。



Answer 8:

相同的错误消息仍然这些天作用域多个问题 - 我的问题是传递一个空值的参数。 答案是对

parameter.Value = (object)yourParamVal ?? DBNULL.Value;


文章来源: Stored procedure or function expects parameter which was not supplied