He creado un procedimiento almacenado que toma un parámetro de tabla de valores que es una tabla con una sola columna de tipo int. La idea es simplemente pasar una lista de identificadores al procedimiento de almacenamiento y permitir que sp funcione con los datos. Sin embargo, en el caso de que no haya datos para pasar, encuentro problemas (las cosas funcionan correctamente cuando tengo datos). Estoy convirtiendo una Lista en un IEnumerable, y vinculando eso al parámetro valuado de la tabla para el sp. He intentado enlazar una lista vacía, lo que dio como resultado el errorEnlazando la lista vacía o el valor nulo al parámetro de tabla de valor en un procedimiento almacenado (.net)
System.ArgumentException: no hay registros en la enumeración SqlDataRecord. Para enviar un parámetro con valores de tabla sin filas, use una referencia nula para el valor en su lugar.
entonces trataron de obligar a un valor nulo (que pensé que era lo que el mensaje anterior quería llegar), pero que sólo dio como resultado un mensaje de error diferente
System.NotSupportedException: DBNull valor para el parámetro '@MainItemIdList ' no es apoyado. Los parámetros con valores de tabla no pueden ser DBNull.
Parece que no se puede declarar el parámetro con valores de tabla anulables en la declaración sp. ¿Cuál es el método correcto para vincular una lista vacía en un parámetro valorado en la tabla?
Nunca está de más agregar una nueva respuesta o mejorar una. La información sigue siendo relevante y alguien más la encontrará útil (¡ese es el objetivo de este sitio!). +1 –
¿Alguna idea de cómo hacer esto si usa adaptadores de tablas antiguos? TableAdapter crea una función de proxy CLR con la misma firma que el SP, y espera un valor no nulo. Pasar nulo o DbNull.Value arroja un error. –
Subir 1. Esto es exactamente lo que tenía que hacer, probado y funciona muy bien. –