2011-01-10 4 views
0

Visual Studio 2010 사용 일부 데이터를 기록해야하는 빠른 .NET 응용 프로그램을 구성하고 있습니다. SQL Server Express의 기본 제공 기능을 사용하고 있으며 데이터 삽입을 위해 저장 프로 시저를 만들었습니다. 나는 문제의 필드에 Null을 허용하도록 데이터베이스 테이블을 설정할 수 있지만 런타임 예외를 생성합니다 "프로 시저 또는 함수 'XYZ'는 제공되지 않은 '@ErrorCode'매개 변수를 필요로합니다."SQL Server Express ... 저장된 프로 시저 "Null 매개 변수"오류

나는 "평범한 방법"는 SqlParameters을 만드는 시도 :

command.Parameters.Add(new SqlParameter("ErrorCode", state.ErrorCode)); 

나는 또한 속성의 많은 설정을 만드는 시도 : 상태 객체에

SqlParameter errorCodeParam = new SqlParameter("ErrorCode", SqlDbType.Int); 
errorCodeParam.IsNullable = true; 
errorCodeParam.Value = state.ErrorCode; 
command.Parameters.Add(errorCodeParam); 

내 ErrorCode가 속성을 단순히 nullable int .... "int?"입니다. 할당 된 값은 "null"입니다. 이 필드의 테이블 열이 null을 허용하기 때문에 불만을 제기하는 이유에 대해 조금 짚고 넘어갑니다.

생각이나 아이디어가 있습니까? 감사.

+0

는이 @MyParam MyDataType 널 널과 같은 매개 변수는 그런 식으로 선언해야하는 절차에 대한 암시하지 않습니다 선언합니다. – u07ch

+0

틀림없이 나는 그렇지 않았다. 그러나 그것을 수정할 때 그것을 저장하지 못하게됩니다. "Null '키워드 근처에 잘못된 구문이 컴파일 오류가 나타납니다."@ErrorCode "스칼라 변수를 선언해야합니다."@PrimaryKey "스칼라 변수를 선언해야합니다." 흥미로운 점은 @StatusCode라는이 매개 변수를 앞지르는 또 다른 nullable int가 있고 시스템이 해당 매개 변수에 대해 불평하지 않는다는 것입니다. 윙윙 거림? – BonanzaDriver

답변

1

몇 가지 추가 실험을 한 후에 나는 다른 사람이 같은 상황에 빠지면 답을 찾아 냈다. SqlParameter에에 C#을 널 (null)을 할당하는 값이있는 경우

나는 널 (NULL)의 INT의 값을 확인하고 이로써
command.Parameters.Add(new SqlParameter("ErrorCode", (state.ErrorCode != null ? state.ErrorCode : null))); 

보고하고, 그렇지 않은 경우 .. (INT는?) : 나는 다음과 같은 문장을 사용하고있다 .. 대신 DBNull.Value가 필요합니다.. 프로 시저에서

관련 문제