20

ストアド プロシージャを呼び出して 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

私を助けてください。前もって感謝します。

4

9 に答える 9

16

使用する必要があります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.AddWithValueAdd文字列とオブジェクトのパラメーターを取った のあいまいなオーバーロードを置き換えます。詳細については、 MSDNを参照してください。

于 2013-02-01T05:14:21.180 に答える
8

その他の場合:パラメーターの1つがnullだったため、同じエラーに直面しました。次のように確認する必要があります。

command.Parameters.AddWithValue("@phone", (object)phone?? DBNull.Value);
于 2017-07-14T12:59:35.660 に答える
3

Insertion ストアド プロシージャは期待しています@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));
于 2013-02-01T05:12:04.020 に答える
2

これができる方法です

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

AddWithValueCommandType.StoredProcedureの両方が不可欠であることに注意してください。

于 2018-06-19T18:51:12.757 に答える
0

「廃止された Add メソッドは 1 つだけです。パラメータ名の文字列と値のオブジェクトを受け入れるメソッドです。お気づきのように、このシナリオでは代わりに 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 を使用する必要があります。

于 2014-02-15T16:14:06.553 に答える
0

パラメータ セットが DBNull.value である値を持たないパラメータは避けてください。

于 2020-07-07T02:30:33.603 に答える