2013-12-02 4 views
-2

привет, друзья, я сталкиваюсь с одной проблемой для загрузки данных в сетку.Процедура или функция ожидает параметр ', который не указан

событие загрузки страницы вызовите один метод, как LoadData() внутри я написать код этого

using (SqlConnection Sqlcon = new SqlConnection(strCon)) 
     { 
      using (SqlCommand cmd = new SqlCommand()) 
      { 
       Sqlcon.Open(); 
       cmd.Connection = Sqlcon; 

       cmd.CommandType = CommandType.StoredProcedure; 
       cmd.CommandText = "SP_Marketing"; 
       //cmd.Parameters.Add(new SqlParameter("@Sno", (object) ?? null.Value)); 
       cmd.Parameters.Add(new SqlParameter("@pvchAction", SqlDbType.VarChar,50)); 
       cmd.Parameters["@pvchAction"].Value = "select"; 
       cmd.Parameters.Add("@pIntErrDescOut", SqlDbType.Int).Direction = ParameterDirection.Output; 

       SqlAda = new SqlDataAdapter(cmd); 
       ds = new DataSet(); 
       SqlAda.Fill(ds); 
       GridViewSample.DataSource = ds; 
       GridViewSample.DataBind(); 
      } 
     } 

находку процедуры сохранения записей в sqlada пойманы ошибки, как "Процедура или функция ожидает параметр @dateemailed который не входит в комплект»

ALTER PROCEDURE SP_Marketing   
(   
@Sno int =0,    
@DateEmailed datetime,    
@DateResponded datetime,    
@EmailRep varchar(100)=null,  
@Type varchar(100)=null,  
@Country varchar(100)=null,  
@State varchar(100)=null,  
@NameoftheCompany varchar(100)=null,  
@website varchar(100)=null,  
@FirstName varchar(100)=null,  
@LastName varchar(100)=null,  
@Title varchar(100)=null,  
@Email varchar(100)=null,  
@Telephone varchar(100)=null,  
@Capabilities varchar(100)=null,  
@Focus varchar(100)=null,  
@pvchCreatedBy varchar(100)=null,    
@pvchAction varchar(50)=null,    
@pIntErrDescOut int output  
)    
AS    
BEGIN    

    if(@pvchAction='select')   
    begin  
    SELECT sno,Dateemailed,dateresponded,emailrep,[type],country,[state],  , nameofthecompany,website,Firstname,Lastname,Title,email,telephone, 
capabilities, Focus FROM Emailmarketing WHERE active=1 
    end 


else if(@pvchAction='insert')  
    begin  
    INSERT INTO EmailMarketing(DateEmailed,DateResponded,EmailRep,[Type],  
    Country,[State],NameoftheCompany,website,FirstName,LastName,Title,Email,Telephone,Capabilities,Focus,Createdby,CreatedDt,Active)VALUES(@DateEmailed,@DateResponded,@EmailRep,@Type,  
    @Country,@State,@NameoftheCompany,@website,@FirstName,@LastName,@Title,@Email,@Telephone,@Capabilities,@Focus,@pvchCreatedBy,GETDATE(),1);  

    end  
    else if(@pvchAction='update')  
    begin  
    UPDATE EmailMarketing SET [email protected],[email protected],[email protected],[Type][email protected],[email protected],[State][email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],UpdatedDt=GETDATE()  
    WHERE [email protected];  
    end  
    else if(@pvchAction='delete')  
    begin  
    UPDATE EmailMarketing SET [email protected] WHERE [email protected];  
    end  

    IF (@@ERROR <> 0)    
    BEGIN    
    SET @pIntErrDescOut = 1    
    END    
    ELSE    
    BEGIN    
    SET @pIntErrDescOut = 0    
    END  



END 
+0

Я не вижу никакого кода для добавления '@ DateEmailed' в качестве параметра в вашем' cmd'? Сообщение об ошибке нечеткое? –

+1

Довольно четкое сообщение об ошибке, которое необходимо предоставить этому параметру в хранимой процедуре. – Ric

+2

Пожалуйста, избегайте префикса ['sp_'] (http://technet.microsoft.com/en-us/library/ms187926.aspx):« Избегайте использования префикса ** sp_ ** при процедуре именования. Этот префикс используется SQL Server для обозначения системных процедур. Использование префикса может привести к разрыву кода приложения, если есть системная процедура с тем же именем ». –

ответ

2

следующие параметры не имеют значения по умолчанию в вашем хранимая процедура:

@DateEmailed datetime,    
@DateResponded datetime, 

Таким образом, вы всегда должны предоставить эти значения в коде:

cmd.Parameters.Add(new SqlParameter("@DateEmailed", SqlDbType.DateTime)); 
cmd.Parameters["@DateEmailed"].Value = DateTime.Now; // Provide your value here 
cmd.Parameters.Add(new SqlParameter("@DateResponded", SqlDbType.DateTime)); 
cmd.Parameters["@DateResponded"].Value = DateTime.Now; // Provide your value here 
+1

Зачем? То, что написано на SO, остается на SO :) Если вам нравится ответ, отметьте его как принятый или повышающий, так работает этот сайт. – Szymon

1

Если вы вызываете хранимую процедуру, в дополнение к NULL вопрос кто-то упоминалось выше, существует проблема несоответствия типа. Например, я получал ошибку «Ожидаемый параметр, который не поставляется», когда я поставлял параметр.

После того как я вытащил волосы на некоторое время, я обнаружил, что процедура имеет входной параметр nvarchar(50), и я передавал строку, которая была длиннее, чем это. По-видимому, любой вид несоответствия сообщается так же, как и не предоставление (которое, как я полагаю, есть).

Таким образом, вы можете дважды проверить типы данных и размеры на обоих концах.

Смежные вопросы