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 spMyStoredProcedure
sin 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);