Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: DarrylОтветов: 1

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

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

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

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

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

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

sqlclientsqlparameter

Ответы

Ответ 1 · рейтинг 3 · Jason Kresowaty

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

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


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

Обнуляемый

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

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы