Функциональность DbParameter IsNullable?

Я не очень много работал с параметрами в ADO.Net. Я пишу собственный поставщик данных .Net (по образцу SqlClient), и мне нужно реализовать свойство IsNullable в моем классе параметров, который наследуется от DbParameter. Мой поставщик данных не будет поддерживать хранимые процедуры, поэтому я буду поддерживать только входные параметры (стиль подстановки).

Документы MSDN довольно неясны в отношении функциональности IsNullable, заявляя: «Получает или задает значение, указывающее, принимает ли параметр нулевые значения». Поиск в Google показывает, что многие люди сбиты с толку тем, что делает IsNullable, говоря, что установка IsNullable в false не запрещает им использовать параметр, который будет иметь нулевое значение, как они и ожидали.

Исходя из этого, я думаю, что, возможно, свойство IsNullable относится к использованию с хранимой процедурой, а также к тому, может ли параметр хранимой процедуры быть нулевым, а не может ли значение параметра быть нулевым.

В этом случае, поскольку у меня не будет хранимых процедур, моя реализация может быть такой:

        public override bool IsNullable { get { return false; } set {} }

Чтобы не возиться с тестовым кодом, чтобы увидеть, как работает реализация IsNullable в SqlParameter, я был бы признателен, если бы кто-нибудь, имеющий опыт написания кода с использованием параметров, мог бы объяснить IsNullable.


person Darryl    schedule 02.07.2009    source источник


Ответы (1)


Свойство IsNullable является информационным. Полезно, когда одна часть кода создает параметр, а другая фактически использует его. Например, параметр может быть автоматически получен из базы данных, и в этом случае программисту полезно иметь возможность увидеть, будет ли принято нулевое значение.

Это мое понимание свойства IsNullable. На самом деле я не знаю какой-либо документации, которая «доказывает», что это действительно правильно.


Поддержкой этого представления будет реализация класса Oracle Oracle.DataAccess.Client.OracleParameter. , где в их документах указано:

Обнуляемый

Это свойство не поддерживается.

И это факт, что значение этого свойства не имеет значения при взаимодействии с Oracle 10 или 11 или 12, как через драйвер MS, так и через указанный драйвер Oracle.

Поведение в других базах данных, конечно, может отличаться.

person Jason Kresowaty    schedule 04.07.2009