Saltar al contenido

Ejecutar procedimiento almacenado con parámetros en Dapper

Siéntete en la libertad de compartir nuestro sitio y códigos con otro, apóyanos para hacer crecer nuestra comunidad.

Solución:

Debe indicarle el tipo de comando: asegúrese de que haya un commandType: CommandType.StoredProcedure en la llamada apuesto. De lo contrario, es simplemente ejecutar el texto dominio:

spMyStoredProcedure

(con algunos parámetros no utilizados en el contexto ambiental). Esto es TSQL legal e intenta llamar spMyStoredProceduresin pasar parámetros – lo mismo que si pones spMyStoredProcedure en SSMS y presione f5.

Además, si sus parámetros son fijos, en realidad sugeriría simplemente usar:

var param = new  somethingId ;

o incluso simplemente en línea completamente:

var result = repository.Exec(SomethingEnum.spMyStoredProcedure,
    new  somethingId , commandType: CommandType.StoredProcedure);

(nota: si su Exec método solo maneja procedimientos almacenados, puede mover el commandType interno al método, o puede convertirlo en un parámetro opcional que por defecto sea CommandType.StoredProcedure)

var queryParameters = new DynamicParameters();
queryParameters.Add("@parameter1", valueOfparameter1);
queryParameters.Add("@parameter2", valueOfparameter2);

await db.QueryAsync(
    "NameOfStoredProcedure",
    queryParameters,
    commandType: CommandType.StoredProcedure)

Dado que este fue el mejor resultado para mí, pero no hubo respuestas que traten con ExecuteNonQuery con parámetros con valores de tabla, aquí está el código para eso:

var queryParameters = new DynamicParameters();
queryParameters.Add("@Param0", datatable0.AsTableValuedParameter());
queryParameters.Add("@Param1", datatable1.AsTableValuedParameter());
var result = await ExecuteStoredProc("usp_InsertUpdateTest", queryParameters);

private async Task> ExecuteStoredProc(string sqlStatement, DynamicParameters parameters)
    
        try
        
            using (SqlConnection conn = new SqlConnection(connectionString))
            
                await conn.OpenAsync();
                var affectedRows = await conn.ExecuteAsync(
                    sql: sqlStatement,
                    param: parameters,
                    commandType: CommandType.StoredProcedure);
                return Result.Ok(affectedRows);
            
        
        catch (Exception e)
        
            //do logging
            return Result.Fail(e.Message);
        
    

Comentarios y valoraciones

¡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 *