Parámetro opcional Sqldatareader

ado.net asp.net c# dapper sqldatareader

Pregunta

Tengo un lector de datos que está obteniendo resultados de mi procedimiento almacenado. El procedimiento almacenado que depende de ciertos valores tales como ("ismarried" = true) devuelve 10 coulmns pero si ("is married" = false) devuelve solo 5 columnas.

En mi página asp.net, mi lector de datos espera 10 columnas sin importar qué y quisiera saber si había alguna forma en mi código asp.net c # de tener parámetros opcionales. Sé que puedes usar ISNULL ("Column", '') en SQL, pero en vez de hacer eso esperaba que hubiera una manera de decirle a mi lector de datos que estos 5 parámetros podrían no existir siempre.

Gracias

Respuesta aceptada

Puede indicar cuántas columnas devolvió el procedimiento almacenado utilizando la propiedad FieldCount . Si devuelve 5 o 10, su código puede reaccionar en consecuencia.


Respuesta popular

En lugar de verificar las columnas devueltas y luego hacer un mapeo basado en el recuento de campos, etc., una solución más limpia sería crear una clase, digamos Persona como tal ...

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public bool IsMarried { get; set; }
    //etc...
}

Entonces, puedes usar dapper para devolver tu resultado ...

var people = cnn.Query<Person>("spName", 
                     commandType: CommandType.StoredProcedure).ToList();

dapper asignará los campos a su propiedad de clase e ignorará los campos que faltan. Tenga en cuenta que los nombres de las propiedades deberán coincidir con los nombres de campo de la base de datos. Esto reducirá cualquier verificación lógica y tendrá que asignar cada propiedad manualmente al campo devuelto.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow