2009-08-26 8 views
5

que necesito para conseguir un poco de un servidor SQL en C#. Intenté soluciones diferentes como:conseguir un poco de SqlServer en C#

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

Pero no puedo encontrar ninguna manera de obtener el Bit. ¿Alguien puede dar un ejemplo?

+0

En una nota lateral, puede hacer que el código un poco más legible/mantenible mediante el uso de GetOrdinal() por ejemplo: rdr.GetSqlBoolean (RDR .GetOrdinal ("MyBitColumn")) – grenade

+0

también he intentado: bool activa = rdr.GetSqlBoolean (12); puedo obtener el resultado: no se puede convertir a bool SqlBoolean – Jorn

+0

Hola, se echa en falta un molde, por favor ver mi respuesta a continuación. – James

Respuesta

12

Si está seguro de que los valores de las columnas nunca serán NULL entonces el siguiente hará el truco:

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

Si es posible que NULL valores pueden ser devueltos:

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

utilizar el método de GetSqlBoolean.

actualización

Asegúrese de emitir su valor de retorno es decir, como un booleano

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

Si va a downvote por favor especifique por qué? No tiene sentido downvote una respuesta sin dar una razón ... – James

+3

'SqlBoolean' es efectiva sólo una envoltura alrededor de un booleano para permitir nulabilidad etc Así que si usted va a llamar' GetSqlBoolean' y luego emitir inmediatamente el resultado de 'bool' también podrías llamar' rdr.GetBoolean' en primer lugar. – LukeH

0

uso GetFieldType para determinar que tipo de datos a utilizar.

0

llegué a la siguiente solución usando:

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

No debería necesitar usar GetOrdinal, el GetSqlBoolean debería ser suficiente. Ambos tienen el mismo tipo de devolución ... – James

+0

No puede votar en StackOverflow hasta que tenga ... 15? puntos de reputación, que gana al obtener votaciones, respuestas seleccionadas y distintivos. Sin embargo, creo que debería poder marcar una respuesta particular como la respuesta elegida. –

+0

'SqlBoolean' es efectivamente solo un contenedor alrededor de un booleano para permitir la nulabilidad, etc. Por lo tanto, si va a llamar a' GetSqlBoolean' y luego inmediatamente enviar el resultado a 'bool', puede simplemente llamar a' rdr.GetBoolean' en primer lugar. – LukeH

0

Hay un método get público de SqlBoolean struct: IsTrue. Para que pueda usarlo de esta manera, para estar seguro de que es resultado booleano:

bool active = rdr.GetSqlBoolean(5).IsTrue; 
Cuestiones relacionadas