2016-07-19 3 views
0

공급되지 않은 매개 변수를 예상 :C#을 저장 프로 시저 시작 프로 시저 또는 함수 내가이 저장 프로 시저를 가지고

ALTER PROCEDURE [dbo].[sp_XNet_Backup] 
    @backupPath NVARCHAR(4000) = null, 
    @rc INT OUT 
AS 
BEGIN 

    SET @rc = 0 
    ... 
    ... 

이 방법으로 C# 프로젝트에서 출시 :

SqlParameter[] paramters = new SqlParameter[2]; 
byte i = 0; 

string sp = "dbo.sp_XNet_Backup"; 

using (SqlConnection conn = DBManager.CreateADOConnMaster()) 
{ 
    conn.Open(); 

    SqlCommand cmd = new SqlCommand(sp, conn); 
    cmd.CommandType = CommandType.StoredProcedure; 
    paramters[i++] = new SqlParameter("@backupPath", completePath); 
    paramters[i] = new SqlParameter("@rc", SqlDbType.Int); 
    paramters[i].Direction = ParameterDirection.InputOutput; 

    foreach (SqlParameter param in paramters) 
     cmd.Parameters.Add(param); 

    cmd.ExecuteNonQuery(); 
    ... 
    ... 

하지만 나에게이 오류 제공 :

Procedure or function 'sp_XNet_Backup' expects parameter '@rc', which was not supplied.

+3

도움이되기를 바랍니다하십시오, 다음 ParameterDirection.Output'는 – stuartd

+0

사이드 노트, 당신은 이름을 변경 고려해야한다'사용하여 프로 시저 및 sp_ 접두사 제거 (또는 더 나은 모든 접두사 삭제). sp_ 접두어는 MS에서 예약되어 있으므로 일부 문제가 발생할 수 있습니다. http://sqlperformance.com/2012/10/t-sql-queries/sp_prefix –

+0

좋아 보인다 :-) – user3518663

답변

0

오히려 다음 ParameterDirection.InputOutput를 사용하여, 사용 ParameterDirection.Output

cmd.Parameters.Add("@rc", SqlDbType.Int).Direction = ParameterDirection.Output; 
try 
{ 
    if (cmd.Connection.State == ConnectionState.Closed) 
    { 
     cmd.Connection.Open(); 
    } 
    cmd.ExecuteNonQuery(); 
    result = Convert.ToInt32(cmd.Parameters["@rc"].Value);  
} 
catch (Exception) 
{ 

} 
finally 
{     
    cmd.Connection.Close(); 
    Response.Write(result); 
} 
0

나는 cmd.ExecuteNonQuery()를 호출하기 전에 할당 된 매개 변수 값이 없기 때문에 이러한 현상이 발생한다고 생각합니다.

에 값을 추가하려고하면 @의 rc``에 값을 할당하지 않는 경우이

foreach (SqlParameter param in paramters) 
    { 
    param.Value = //somevalue 
    cmd.Parameters.Add(param); 
    }