2009-08-26 8 views
5

J'ai besoin d'obtenir un peu d'un serveur sql en C#. J'ai essayé différentes solutions comme:Obtenir un bit de SqlServer dans C#

bool active = rdr.GetSqlBinary(5); 
Int16 active = rdr.GetSqlBinary(5); 

Mais ne trouve aucun moyen d'obtenir le bit. Quelqu'un peut-il donner un exemple?

+0

Sur une note de côté, vous pouvez rendre votre code un peu plus lisible/maintenable en utilisant GetOrdinal() par exemple: rdr.GetSqlBoolean (rdr .GetOrdinal ("MyBitColumn")) – grenade

+0

J'ai également essayé: bool actif = rdr.GetSqlBoolean (12); Je reçois le résultat: ne peut pas convertir SqlBoolean en booléen – Jorn

+0

Salut, il vous manque une distribution, s'il vous plaît voir ma réponse ci-dessous. – James

Répondre

12

Si vous êtes certain que les valeurs de la colonne ne seront jamais NULL les commandes suivantes vont faire l'affaire:

bool active = rdr.GetBoolean(rdr.GetOrdinal("Active")); 

S'il est possible que les valeurs NULL peuvent être renvoyées:

int oActive = rdr.GetOrdinal("Active"); 
bool? active = rdr.IsDBNull(oActive) ? (bool?)null : rdr.GetBoolean(oActive); 
4

Utilisez la méthode GetSqlBoolean.

Mise à jour

Assurez-vous que vous jetez vos valeur de retour comme un booléen à savoir

var active = (bool)rdr.GetSqlBoolean(5); 
+0

Si vous allez downvote s'il vous plaît préciser pourquoi? Cela n'a pas de sens de baisser une réponse sans donner de raison ... – James

+3

'SqlBoolean' est en fait juste un wrapper autour d'un booléen pour permettre la nullité, etc. Donc, si vous appelez' GetSqlBoolean' et que vous lancez immédiatement le résultat sur 'bool' vous pourriez tout aussi bien appeler' rdr.GetBoolean' en premier lieu. – LukeH

0

utilisation GetFieldType pour déterminer ce type de données à utiliser.

0

Je suis arrivé à la solution suivante en utilisant:

bool active = (bool)rdr.GetSqlBoolean(rdr.GetOrdinal("Active")); 
+0

Vous ne devriez pas avoir besoin d'utiliser GetOrdinal, le GetSqlBoolean devrait suffire. Ils ont tous deux le même type de retour ... – James

+0

Vous ne pouvez pas upvote sur StackOverflow jusqu'à ce que vous ayez ... 15? les points de réputation, que vous gagnez en obtenant vous-même des upvotes, des réponses sélectionnées et des badges. Je pense que vous devriez être capable de marquer une réponse particulière comme la réponse choisie, cependant. –

+0

'SqlBoolean' est en fait juste un wrapper autour d'un booléen pour permettre la nullité, etc. Donc si vous appelez' GetSqlBoolean' et que vous transtypez immédiatement le résultat en 'bool', vous pouvez tout aussi bien appeler' rdr.GetBoolean' en premier lieu. – LukeH

0

Il existe une méthode publique get de SqlBoolean struct: IsTrue. Donc, vous pouvez l'utiliser de cette façon, pour être sûr ce résultat est booléen:

bool active = rdr.GetSqlBoolean(5).IsTrue; 
Questions connexes