2013-09-26 2 views
0

오류가 발생하지 않는 문제가 발생합니다. 즉시 창에 매개 변수가 누락되지 않았지만 디버거에 누락되었다고 표시됩니다. CP에 아무도이 것에 대한 대답을 가지고 있지 않았습니다.SqlDataReader가 누락 된 매개 변수를 필요로 함

Error: Procedure or function 'cpWeeklyPharmDataintDrvr' expects parameter '@companyID', which was not supplied.

직접 실행 창 :

cmd.Parameters["@companyID"].Value 1356 

SqlCommand cmd = new SqlCommand("cpWeeklyPharmDataintDrvr", sqlC); 

sqlC.Open(); 

cmd.Parameters.Add(new SqlParameter("@companyID", SqlDbType.Int)).Value = Master.CompanyId; 
cmd.Parameters.Add(new SqlParameter("@sStartDate", SqlDbType.NVarChar, 30)).Value = Master.StartDate; 
cmd.Parameters.Add(new SqlParameter("@sEndDate", SqlDbType.NVarChar, 30)).Value = Master.EndDate; 

if (Master.RegionId > 0) 
    cmd.Parameters.Add(new SqlParameter("@region", SqlDbType.Int)).Value = Master.RegionId; 

if (Master.DistrictId > 0) 
    cmd.Parameters.Add(new SqlParameter("@district", SqlDbType.Int)).Value = Master.DistrictId; 

if (Master.StoreId . 0) 
    cmd.Parameters.Add(new SqlParameter("@store", SqlDbType.NVarChar)).Value = Master.StoreId.ToString(); 

SqlDataReader dR = cmd.ExecuteReader(); // This is where error occurs. 
+3

Master.CompanyID가 0보다 큰 경우에만 매개 변수를 컬렉션에 추가합니다. 그러나 SP는 이러한 선택성을 좋아하지 않습니다. 이 매개 변수는 항상 지정해야합니다. – Steve

+0

코드가 수정되었지만 여전히 동일한 오류가 발생합니다. 즉각적인 창은 그 값이 실제로 누락 된 것이 아니라고보고합니다. – Spitfire19

+2

은 건너 뛴 이전 매개 변수 중 하나입니까? 또한 당신의 명령을 저장 proc 지정입니까? – lincolnk

답변

1

당신은 if 문 내부에 추가 매개 변수 문이있다. if가 실패하면 아무 것도하지 않지만 프로 시저가 실패합니다. 오류를 던지는 else 문을 추가하거나 매개 변수가 없으면 매개 변수를 기본값으로 설정합니다.

또한 Master.CompanyId가 null인지 확인하십시오. 오류가 발생할 수 있습니다. 마지막으로 Add 메서드가 제대로 작동하지 않을 수 있습니다.

AddWithValue를 시도해보십시오.

0

저장 프로 시저로 전달되는 매개 변수가 무엇인지 보려면 SQL 프로파일 러를 실행 해보십시오. 데이터베이스에있는 논리와 함께이 매개 변수가 올바른지 알 수 있습니다. (질문에 게시하지 않은)

또한 명령 유형을 StoredProcedure로 지정해야합니다.

+0

임시 해결책을 가지고있어 SQLbuildder를 사용하여 SQL 명령을 작성하고 있지만 현재로서는이 스타일을 사용하고 싶습니다. 나는 스티브의 제안을 확실히 사용할 것이다. Visual Studio를 사용하면 Intellitrace가 Stored Procedure가 실행 된 것을 알려주지 만 어떤 매개 변수가 전달되는지는 알려주지 않습니다. SQL 프로파일 러를 실제로 사용해 본 경험이 없습니다. – Spitfire19

+0

Stored Procedure로 cmd를 설정하여 주셔서 감사합니다. – Spitfire19

0

나는 두 가지

CommandType을의
  1. 유형을 관찰 StoredProcedures에 회사 ID에

  2. Null 값을 설정할 수 있습니다.

하드 코드 된 값을 전달하고 작동하는지 확인해보십시오. 언젠가 그것은 null로 동일하게 말합니다. 그리고 당신의 sp에 @companyId int =null, null 값을 너무 수락 할 수 있도록 매개 변수를 선언하십시오.

관련 문제