c# 声明存储过程参数在代码中时是预期的

c# states stored procedure parameter is expected when its in the code

我一直收到这个异常,但我不知道为什么

Procedure or function 'InsertNewUser' expects parameter '@Username', which was not supplied

有什么想法吗?

try
{
    SqlCommand cmd = con.CreateCommand();
    cmd.CommandText = "InsertNewUser";

    cmd.Parameters.Add(parameterName: "@Username", sqlDbType: SqlDbType.VarChar).Value = UsernameTextBox.Text.ToString();
    cmd.Parameters.Add(parameterName: "@Email", sqlDbType: SqlDbType.VarChar).Value = EmailTextBox.Text.ToString();
    cmd.Parameters.Add(parameterName: "@Password", sqlDbType: SqlDbType.VarChar).Value = PasswordTextBox.Text.ToString();
    cmd.Parameters.Add(parameterName: "@FirstName", sqlDbType: SqlDbType.VarChar).Value = FirstNameTextBox.Text.ToString();
    cmd.Parameters.Add("@SecondName", SqlDbType.VarChar).Value = SecondNameTextbox.Text.ToString();

    con.Open();
    cmd.ExecuteNonQuery();
    con.Close();

    MessageBox.Show("Registration Successful");
}
catch(Exception ex)
{
    MessageBox.Show("Registration Failed");
}

在您的代码中添加以下行...

您正在提供存储过程名称并传递参数但没有告诉它,它是一个存储过程而不是文本查询。

cmd.CommandType = CommandType.StoredProcedure;

这会起作用:

try
{
    SqlCommand cmd = con.CreateCommand();
    cmd.CommandText = "InsertNewUser";
    cmd.CommandType = CommandType.StoredProcedure; //<---  Specify your command type

    cmd.Parameters.AddWithValue("@Username", UsernameTextBox.Text);
    cmd.Parameters.AddWithValue("@Email", EmailTextBox.Text);
    cmd.Parameters.AddWithValue("@Password", PasswordTextBox.Text);
    cmd.Parameters.AddWithValue("@FirstName", FirstNameTextBox.Text);
    cmd.Parameters.AddWithValue("@SecondName", SecondNameTextbox.Text);

    con.Open();
    cmd.ExecuteNonQuery();
    con.Close();

    MessageBox.Show("Registration Successful");
}
catch(Exception ex)
{
    MessageBox.Show("Registration Failed");
}