es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Ejecute SqlCommand sin proporcionar valores a los parámetros.

Tengo un procedimiento almacenado en mi base de datos:

ALTER PROCEDURE [dbo].[SP_UPDATE_PARAMS]
(@ELEMENTO NUMÉRICO (10),
@NUM_PARAM_OP_DINT NUMÉRICO (3,0) OUTPUT,
@NUM_PARAM_OP_REAL NUMÉRICO (3,0) OUTPUT,
@NUM_PARAM_LL NUMÉRICO (3,0) OUTPUT,
…. + otros 500 parámetros de salida

El procedimiento produce una salida para cada valor dependiendo del valor de @Elemento. De lo contrario, devuelve un valor de 0.

Entonces, en mi código C# intento usar esto:

….
using (SqlConnection connection = new SqlConnection(connectString))
{
connection.Open();

using (SqlCommand cmd = new SqlCommand("[dbo].[SP_UPDATE_PARAMS]", connection))
{
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("@ELEMENTO", SqlDbType.Int).Value = elemento;

    SqlDataReader rdr = cmd.ExecuteReader();

…..

Pero obtengo este error:

El procedimiento almacenado o la función [dbo].[SPUPDATEPARAMS] espera un parámetro que no se proporciona @NUMPARAMOP_DINT

Esto ocurrirá si no proporciono un valor para cada uno de los 504 valores de [dbo].[SP_UPDATE_PARAMS] (incluso si son de salida)

Intenté usar

foreach (IDataParameter param in cmd.Parameters)
{
param.Value = DBNull.Value;
}

y

foreach (SqlParameter parameter in cmd.Parameters)
{
parameter.Value = DBNull.Value;
}

antes de llamar a

SqlDataReader rdr = cmd.ExecuteReader();

pero ninguno de ellos funciona, ya que cmd.Parameters es nulo hasta (supongo) que se ejecuta cmd.ExecuteReader().

¿Cómo podría evitar tener que proporcionar un valor para todos los parámetros o hacer que todos sean nulos?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Puede evitar tener que proporcionar un valor para todos los parámetros mediante el uso del método SqlCommand.Parameters.Clear() antes de agregar el parámetro @ELEMENT. Esto limpiará todos los parámetros del objeto SqlCommand y le permitirá agregar solo el parámetro @ELEMENT.

    También puede usar el método SqlParameterCollection.AddWithValue() para agregar el parámetro @ELEMENT y establecer su valor en DBNull.Value. Esto establecerá el valor del parámetro en null y evitará tener que proporcionar un valor para todos los parámetros.

Comments are closed.