Pergunta

Eu não tenho trabalhado com os parâmetros em ADO.Net muito. Eu estou escrevendo um provedor de dados .NET personalizado (modelado em SqlClient), e tem que implementar a propriedade IsNullable na minha classe parâmetro, que herda de DbParameter. Meu provedor de dados não vai apoiar procedimentos armazenados, então eu só vai apoiar Parâmetros de entrada (estilo de substituição).

Os docs MSDN são bastante claro sobre a funcionalidade do IsNullable, afirmando que "Obtém ou define um valor que indica se o parâmetro aceita valores nulos". Googling vira para cima um monte de gente confusa sobre o que IsNullable faz, dizendo que a criação IsNullable para false não proíbe-os de usar um parâmetro será um valor nulo, uma vez que teria esperado.

Com base nisso, eu estou pensando que talvez os pertence propriedade IsNullable para uso com um procedimento armazenado, e se ou não parâmetro do procedimento armazenado é anulável, não se o valor do parâmetro pode ser nulo.

Nesse caso, já que não vai ter armazenado procedimentos, minha implementação pode simplesmente ser:

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

Para evitar ter que mexer com um código de teste para ver como a implementação de obras IsNullable de SqlParameter, eu apreciaria se alguém com experiência em escrever código usando parâmetros poderia explicar IsNullable.

Foi útil?

Solução

A propriedade IsNullable é informativo. É útil quando uma parte do código cria o parâmetro e outro realmente usa-lo. Por exemplo, o parâmetro pode ser automaticamente derivadas do banco de dados, caso em que é útil para o programador para ser capaz de ver ou não um valor nulo é susceptível de ser aceite.

Este é o meu entendimento da propriedade IsNullable. Eu realmente não sei de qualquer documentação que "prova" este é realmente correto.


Apoiando essa visão seria a implementação do A oracle classe Oracle.DataAccess.Client.OracleParameter , onde seus documentos de estado:

IsNullable

Esta propriedade não é suportado.

E é um facto que o valor desta propriedade é irrelevante quando a interface com Oracle 10 ou 11 ou 12, quer através do driver MS ou o driver Oracle citados.

Comportamento em outros bancos de dados podem ser diferentes, claro.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top