Класс SqlParameter наследует от абстрактного базового класса DbParameter , который определяет
public abstract bool IsNullable {get; set;}
Так что SqlParameter
должна иметь публичную реализацию свойства IsNullable
.Класс DbParameter
является базовым классом для всех реализаций параметров базы данных, включенных в System.Data
.
. При этом необходимо предположить, что существуют другие СУБД, которые явно разрешают или запрещают явное указание параметров процедуры или функции.определяется как обнуляемый или не обнуляемый, и SqlParameter.IsNullable
существует только потому, что SqlParameter реализует более общий общий класс параметров базы данных и интерфейсы, которые являются общими для других классов взаимодействия с базой данных .NET.
Если смотреть в отражателе, SqlParameter
класс не использует IsNullable
, кроме как для передачи значения, когда оно преобразуется в «InstanceDescriptor».Я не копался в том, для чего используется класс InstanceDescriptor
, но я проверил класс SqlCommand
, в частности, метод BuildParamList
, который преобразует SqlParameterCollection
в строку параметров SQL, отправляемых в базу данных..
Метод BuildParamList
перебирает SqlParameterCollection
и использует StringBuilder
для построения строки параметра.BuildParamList
не использует свойство или значение IsNullable
нигде в своей реализации.Фактически, ссылка на SqlParameter.IsNullable
не появляется нигде в классе SqlCommand.
Возможно, я пропустил ссылку на него в каком-то внутреннем / частном методе, который передает объект SqlParameter
другомукласса, но если метод BuildParamList
не использует его, это не имеет значения, поскольку он не влияет на строку SQL, отправляемую на SQL Server.
В дополнение к выполненным вами тестам, изучаетсяСодержимое класса SqlCommand
подтверждает вывод о том, что вы можете спокойно игнорировать значение свойства SqlParameter.IsNullable
.
Когда мы позаботились о стороне SQL Server, я быстро обыскал Интернет, чтобы узнать, смогу ли я.найти любые СУБД, которые допускают явно обнуляемые / не обнуляемые параметры процедуры или функции.Я остановился, когда натолкнулся на ссылку для DB2, которая, по-видимому, требует, чтобы в процедуре был задан определенный атрибут, позволяющий ему передавать нулевые значения.Я не знаю ни одной современной СУБД, обладающей этой функцией, и мой поиск ничего больше не дал.