SqlParameter에 클래스는 IsNullable
재산의 공개 구현을 가지고
public abstract bool IsNullable {get; set;}
그래서 SqlParameter
요구 사항을 정의하는 추상 기본 클래스 DbParameter에서 상속합니다. DbParameter
클래스는 System.Data
에 포함 된 모든 데이터베이스 매개 변수 구현의 기본 클래스입니다.
프로 시저 또는 함수 매개 변수를 명시 적으로 허용 또는 거부하는 것으로 명시 적으로 허용 또는 거부 할 수있는 다른 DBMS가 있다고 가정해야합니다. SqlParameter.IsNullable
은 SqlParameter가보다 일반적인 공용 데이터베이스 매개 변수 클래스와 인터페이스를 구현하기 때문에 존재합니다. 다른 .NET 데이터베이스 상호 작용 클래스와 공통입니다.
반사경을 보면 SqlParameter
클래스는 "InstanceDescriptor"로 변환 될 때 값을 전달하는 것 외에 IsNullable
을 사용하지 않습니다. 나는 InstanceDescriptor
클래스가 사용되는 것을 파고 들지 않았지만 SqlCommand
클래스, 특히 BuildParamList
메서드를 확인했습니다. SqlParameterCollection
을 데이터베이스로 전송 된 매개 변수의 SQL 문자열로 변환합니다.
BuildParamList
메서드는 SqlParameterCollection
을 반복하고 StringBuilder
을 사용하여 매개 변수 문자열을 작성합니다. BuildParamList
은 구현시 어느 곳에서도 IsNullable
속성이나 값을 사용하지 않습니다. 사실 SqlParameter.IsNullable
에 대한 참조는 SqlCommand 클래스의 어느 곳에 나타나지 않습니다.
SqlParameter
개체를 다른 클래스로 전달하는 일부 내부/개인 메서드에서 참조가 누락되었을 수 있지만 BuildParamList
메서드가이를 사용하지 않으면 문제가되지 않으므로 문제가되지 않습니다. SQL 문자열을 SQL Server로 보냅니다.
수행 한 테스트 사례 외에도 SqlCommand
클래스의 내용을 검토하면 SqlParameter.IsNullable
속성 값을 무시해도 안전하다는 결론을 뒷받침합니다.
SQL Server 측에서는 인터넷을 통해 빠른 검색을 통해 명시 적으로 nullable/nullable 프로 시저 또는 함수 매개 변수를 허용하는 DBMS를 찾을 수 있는지 확인했습니다. NULL 값을 전달할 수 있도록 프로 시저에 특정 속성을 설정해야하는 것처럼 보이는 DB2에 대한 참조를 실행했을 때 중지되었습니다. 나는이 기능이있는 현대의 RDBMS를 전혀 모르고 있으며 내 검색은 다른 것을 찾지 못했습니다.
null 지시문없이 '저장된'proc 매개 변수를 정의하면 null을 전달할 수 없습니다 (db는 오류를 발생시킵니다) –
@ M.R. null 지시어가 무슨 뜻인지 모르겠습니다. 즉, 기본값을 null로 설정하는 것입니까? @MyInt int = null이 'null 지시어'가 포함되거나 포함되지 않은 매개 변수 선언의 예를 제공 할 수 있습니까? – Martyn
correct - @MyInt int vs @MyInt int = null. 당신이 이전을 할 때, 당신은 어쨌든 null을 건네 줄 수 없습니다 .... –