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?
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 objetoSqlCommand
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 enDBNull.Value
. Esto establecerá el valor del parámetro ennull
y evitará tener que proporcionar un valor para todos los parámetros.