DbParameter IsNullable функциональность?
Я не очень много работал с параметрами в ADO.Net. Я пишу пользовательский поставщик данных.Net (смоделированный на SqlClient) и должен реализовать свойство IsNullable в моем классе параметров, который наследуется от DbParameter. Мой поставщик данных не будет поддерживать хранимые процедуры, поэтому я буду поддерживать только параметры ввода (стиль замещения).
Документы MSDN довольно неясны относительно функциональности IsNullable, заявляя "Получает или задает значение, которое указывает, принимает ли параметр нулевые значения". Googling обнаруживает, что многие люди не понимают, что делает IsNullable, говоря, что установка IsNullable в значение false не запрещает им использовать параметр, который будет иметь нулевое значение, как они и ожидали.
Исходя из этого, я думаю, что, возможно, свойство IsNullable относится к использованию с хранимой процедурой, и является ли параметр хранимой процедуры обнуляемым, а не может ли значение параметра быть нулевым.
В этом случае, поскольку у меня не будет хранимых процедур, моя реализация может быть такой:
public override bool IsNullable { get { return false; } set {} }
Чтобы избежать необходимости возиться с некоторым тестовым кодом, чтобы увидеть, как работает реализация IsNullable в SqlParameter, я был бы признателен, если бы кто-то, имеющий опыт написания кода с использованием параметров, мог объяснить IsNullable.
1 ответ
Свойство IsNullable является информационным. Это полезно, когда одна часть кода создает параметр, а другая фактически использует его. Например, параметр может быть автоматически получен из базы данных, и в этом случае программисту будет полезно видеть, может ли быть принято нулевое значение.
Это мое понимание свойства IsNullable. На самом деле я не знаю ни одной документации, которая "доказывает", что это действительно правильно.
Поддерживая эту точку зрения будет реализация Oracle Oracle.DataAccess.Client.OracleParameter
класс, в котором указано их документы:
IsNullable
Это свойство не поддерживается.
И фактом является то, что значение этого свойства не имеет значения при взаимодействии с Oracle 10, 11 или 12, либо через драйвер MS, либо указанный драйвер Oracle.
Поведение в других базах данных может отличаться, конечно.