Вопрос

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

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

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

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

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

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

Это было полезно?

Решение

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

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


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

IsNullable

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top