Функциональность DbParameter IsNullable?
-
21-08-2019 - |
Вопрос
Я не очень много работал с параметрами в 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.
Конечно, поведение в других базах данных может отличаться.