2016-05-12 1 views
-1

я должен создать процедуру в SQLServer как,Как исправить номер ошибки: 8114 «Процедура или функция имеет слишком много аргументов, указанных» в приложении C# Windows

create procedure LeaveMasterProcdure(
@code nvarchar(20), 
@type nvarchar(20), 
@condition nvarchar(1000), 
@leavedays nvarchar(50) 
) 
As 
DECLARE @Max INT 
     , @id varchar(50) 

IF NOT EXISTS(SELECT id FROM LeaveMaster) 
BEGIN 
     SET @id = 'L001'      
     INSERT INTO dbo.LeaveMaster(id,code,type,conditions,No_ofleaves) 
     VALUES(@id,@code,@type,@condition,@leavedays)   
END 
ELSE 
BEGIN 
     SELECT @Max = CONVERT(INT, SUBSTRING(CONVERT(NVARCHAR(10),id), 2, 10)) FROM LeaveMaster 
     SET @id = 'L' + RIGHT('00' + CONVERT(NVARCHAR(10), @Max + 1), 5) 
     INSERT INTO dbo.LeaveMaster(id,code,type,conditions,No_ofleaves) 
     VALUES(@id,@code,@type,@condition,@leavedays)  
     END 

Также я ввожу значение, процедура вставки в SqlManagementStudio

Но когда я пытаюсь вставить процедуру программы я процедуры или функция имеет слишком много аргументов указаны исключения. Этот код:

   SqlCommand AddLeave = con.CreateCommand(); 

       SqlParameter id = new SqlParameter("@id", SqlDbType.VarChar); 
       SqlParameter code = new SqlParameter("@code", SqlDbType.VarChar); 
       SqlParameter type = new SqlParameter("@type", SqlDbType.VarChar); 
       SqlParameter conditions = new SqlParameter("@conditions", SqlDbType.VarChar); 
       SqlParameter No_ofleaves = new SqlParameter("@No_ofleaves", SqlDbType.VarChar); 

       AddLeave.Parameters.Add(id); 
       AddLeave.Parameters.Add(code); 
       AddLeave.Parameters.Add(type); 
       AddLeave.Parameters.Add(conditions); 
       AddLeave.Parameters.Add(No_ofleaves); 

       SqlCommand ccc = new SqlCommand("select type from LeaveMaster", con); 

       SqlDataReader r1 = ccc.ExecuteReader(); 
       while (r1.Read()) 
       { 
        s1 = r1["type"].ToString(); 
       } 
       if (s1 == null) 
        id.Value = " "; 
       else if (s1 != null) 
        id.Value = s1.ToString(); 
       r1.Close(); 


       code.Value = textBox_Leave_Code.Text; 
       type.Value = textBox_Leave_Type.Text; 
       conditions.Value = textBox_Conditions.Text; 
       No_ofleaves.Value = textBox_total_leave.Text; 

       AddLeave.Connection = con; 

       AddLeave.CommandText = "LeaveMasterProcdure @id,@code,@type,@conditions,@No_ofleaves"; 


       try 
       { 
        AddLeave.ExecuteNonQuery(); 
        MessageBox.Show("added"); 
       } 
       catch (Exception vv) 
       { 
        MessageBox.Show(vv.ToString()); 
       } 

Я не знаю, как это исправить. Пожалуйста, помогите мне ...

+0

У вас есть 4 параметра в вашем предложении и 5 в вашем коде. И их следует назвать равными. – fubo

+0

удалите эту строку 'SqlParameter id = new SqlParameter (" @ id ", SqlDbType.VarChar);' и переименуйте '@ No_ofleaves' в' @ leavedays' – wiretext

+0

@tinka не работает с тем же исключением –

ответ

0
  1. Параметр @id отсутствует.
  2. @conditions в коде не соответствует @condition в процессе.
  3. @No_ofleaves не соответствует @leavedays.

Вот простой способ сделать их легче поймать. Скопируйте список параметров из хранимой процедуры в свой код C# и прокомментируйте это. Теперь вы их обоих в одном месте, и вам не нужно переключаться туда и обратно. Когда вы закончите, удалите комментарии.

Обычно я копирую и вставляю имена параметров из моего SQL, потому что это исключает возможность опечаток.

//@code nvarchar(20), 
//@type nvarchar(20), 
//@condition nvarchar(1000), 
//@leavedays nvarchar(50) 

SqlParameter id = new SqlParameter("@id", SqlDbType.VarChar); 
SqlParameter code = new SqlParameter("@code", SqlDbType.VarChar); 
SqlParameter type = new SqlParameter("@type", SqlDbType.VarChar); 
SqlParameter conditions = new SqlParameter("@conditions", SqlDbType.VarChar); 
SqlParameter No_ofleaves = new SqlParameter("@No_ofleaves", SqlDbType.VarChar); 
Смежные вопросы