ストアドプロシージャを呼び出してSQL Serverデータベースにデータを挿入しようとしていますが、エラーが発生しています
*プロシージャまたは関数 'Insertion'にはパラメータ '@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
私を助けてください。前もって感謝します。
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 [〜#〜] をご覧ください。
ヘッドサップだけで、誰かが魂を探す時間を大幅に節約できます。パラメーターを渡すためにAddWithValueを使用するなど、ここでの推奨事項に従ったが、すべてが検証されたにもかかわらず、「提供されていません」というエラーメッセージが表示される場合は、コマンドオブジェクトのCommandTypeプロパティを設定したかどうかを確認してくださいCommandType.StoredProcedureに。
このプロパティを設定しないと同じメッセージが表示されます、信じてください!それが誰かを助けることを願っています。
挿入ストアドプロシージャには、@Emp_no
が必要です(他の約15個のパラメーターと共に)。パラメータを渡さずにストアドプロシージャを呼び出すことはできません。
参考のためにこのサイトを見てください:
変数を定義するすべての場所で、代わりにParameters.AddWithValue
を使用します。
cmd.Parameters.AddWithValue("@Emp_no ", Convert.ToInt32(txtbx_Empno.Text));
その他の場合:パラメーターの1つがヌルだったため、同じエラーが発生しました。次のように確認する必要があります。
command.Parameters.AddWithValue("Features", (object)productDb.Features ?? DBNull.Value);
これを使用する必要があります:
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);
それ以外の場合、各パラメーターに対してその例外をスローします。
これはそれができる方法です
using (var cmd = new SqlCommand("STORED_PROCEDURE_NAME", SqlConnection))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@PARAM_NAME", PARAM_VALUE);
}
AddWithValue
、およびCommandType.StoredProcedure
両方が不可欠です。
「廃止されたAddメソッドは1つしかありません。パラメーター名の文字列と値のオブジェクトを受け入れるメソッドです。既に説明したように、このシナリオではなくAddWithValueを呼び出す必要があります。」
すべてのParameter.Addメソッドが減価償却されるわけではありません。 OUTPUTパラメーターを作成するにはどうしますか?これにはParameter.Addを使用する必要があります。
最近も複数の問題を対象とした同じエラーメッセージ-私の問題はパラメータにnull値を渡していました。答えは
parameter.Value = (object)yourParamVal ?? DBNULL.Value;