Domanda

Non ho lavorato con i parametri in ADO.Net molto. Sto scrivendo un provider di dati .NET personalizzato (modellato su SqlClient), e devono implementare la proprietà IsNullable nella mia classe di parametri, che eredita da DbParameter. Il mio provider di dati non supporterà stored procedure, quindi mi sosterrà solo ingresso (stile sostituzione) i parametri.

La documentazione MSDN sono piuttosto chiare sulla funzionalità del IsNullable, dichiarando "Ottiene o imposta un valore che indica se il parametro accetta valori nulli." Googling salta fuori un sacco di gente confusa su ciò che fa IsNullable, dicendo che l'impostazione IsNullable su false non li vieta di utilizzare un parametro un valore nullo, in quanto si sarebbe aspettato.

Sulla base di questo, penso che forse la proprietà IsNullable riguarda l'utilizzo con una stored procedure, e se il parametro della stored procedure è annullabile, non è se il valore del parametro può essere null.

In questo caso, dal momento che non avrò le stored procedure, la mia implementazione può essere solo:

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

Per evitare di dover smanettare con qualche codice di prova per vedere come l'implementazione di SqlParameter di opere IsNullable, sarei grato se qualcuno con esperienza nella scrittura del codice con parametri potrebbe spiegare IsNullable.

È stato utile?

Soluzione

La proprietà IsNullable è informativo. E 'utile quando una parte del codice crea il parametro e un altro in realtà lo usa. Ad esempio, il parametro potrebbe essere derivata automaticamente dalla banca dati, nel qual caso è utile al programmatore di essere in grado di vedere se un valore nullo rischia di essere accettato.

Questa è la mia comprensione della proprietà IsNullable. Io in realtà non so di alcuna documentazione che "dimostra" questo è in realtà corretto.


A sostegno di questa vista sarebbe l'attuazione del Oracle Oracle.DataAccess.Client.OracleParameter classe , dove la loro documentazione dello stato:

  

IsNullable

     

Questa proprietà non è supportata.

Ed è un fatto che il valore di questa proprietà è irrilevante quando si interfaccia con Oracle 10 o 11 o 12, sia attraverso il driver MS o il driver Oracle citato.

Comportamento su altre basi di dati può essere diversa, naturalmente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top