Saltar al contenido

El procedimiento o la función almacenados espera un parámetro que no se proporciona

Solución:

En mi caso, recibí esta excepción incluso cuando todos los valores de los parámetros se proporcionaron correctamente pero no se especificó el tipo de comando:

cmd.CommandType = System.Data.CommandType.StoredProcedure;

Obviamente, este no es el caso en la pregunta anterior, pero la descripción de la excepción no es muy clara en este caso, por lo que decidí especificar eso.

Me encontré con este problema ayer, pero ninguna de las soluciones aquí funcionó exactamente, sin embargo, me indicaron la dirección correcta.

Nuestra aplicación es una herramienta de flujo de trabajo escrita en C # y, excesivamente simplificada, tiene varios procedimientos almacenados en la base de datos, así como una tabla de metadatos sobre cada parámetro utilizado por cada procedimiento almacenado (nombre, orden, tipo de datos, tamaño, etc.), permitiéndonos crear tantos procedimientos almacenados nuevos como necesitemos sin tener que cambiar el C #.

El análisis del problema mostró que nuestro código estaba configurando todos los parámetros correctos en el SqlCommand objeto, sin embargo, una vez que se ejecutó, arrojó el mismo error que obtuvo el OP.

Un análisis más detallado reveló que algunos parámetros tenían un valor de null. Por tanto, debo sacar la conclusión de que SqlCommand los objetos ignoran cualquier SqlParameter objeto en su .Parameters colección con un valor de null.

Hay dos soluciones a este problema que encontré.

  1. En nuestros procedimientos almacenados, asigne un valor predeterminado a cada parámetro, por lo que desde @Parameter int para @Parameter int = NULL (o algún otro valor predeterminado según sea necesario).

  2. En nuestro código que genera al individuo SqlParameter objetos, asignando DBNull.Value en lugar de null donde el valor deseado es un SQL NULL Hace el truco.

El codificador original ha avanzado y el código se escribió originalmente con la Solución 1 en mente, y habiendo sopesado los beneficios de ambos, creo que me quedaré con la Solución 1. Es mucho más fácil especificar un valor predeterminado para un procedimiento almacenado específico al escribirlo, en lugar de que siempre sea NULL como se define en el código.

Espero que ayude a alguien.

Su procedimiento almacenado espera 5 parámetros como entrada

@userID int, 
@userName varchar(50), 
@password nvarchar(50), 
@emailAddress nvarchar(50), 
@preferenceName varchar(20) 

Por lo tanto, debe agregar los 5 parámetros a esta llamada a SP:

    cmd.CommandText = "SHOWuser";
    cmd.Parameters.AddWithValue("@userID",userID);
    cmd.Parameters.AddWithValue("@userName", userName);
    cmd.Parameters.AddWithValue("@password", password);
    cmd.Parameters.AddWithValue("@emailAddress", emailAddress);
    cmd.Parameters.AddWithValue("@preferenceName", preferences);
    dbcon.Open();

PD: No está claro para qué sirven estos parámetros. No usa estos parámetros en su cuerpo SP, por lo que su SP debería verse así:

ALTER PROCEDURE [dbo].[SHOWuser] AS BEGIN ..... END
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *