none
Error al ejecutar Stored Procedures con sp_executesql RRS feed

  • Pregunta

  • Hola, de antemano gracias. Estoy ejecutando desde .NET un SP, con una traza del Profiler veo que se ejecuta lo siguiente:

    Error

    declare @p5 bigint
    set @p5=NULL
    exec sp_executesql N'sproc_AgregarArticulo',N'@vchNombre varchar(50),@vchDescripcion varchar(254),@binIdArticulo bigint output',@vchNombre='Mauro',@vchDescripcion='Descripcion',@binIdArticulo=@p5 output
    select @p5

    El error que me da es:

    .NET

    Sql Server

    Error desde SSMS

    El Stored Procedure que estoy queriendo ejecutar es:


    Espero me puedan ayudar.

    Gracias,

    Saludos


    • Editado Mauro Bravo lunes, 21 de agosto de 2017 10:07
    lunes, 21 de agosto de 2017 10:01

Respuestas

  • Todo lo que adjuntas es correcto, lo que falto es indicar como es que se debe interpretar el contenido de la propiedad 'CommandText', claro, se trata de un procedimiento almacenado pero eso no lo sabe el proveedor de datos, tú debes de indicarlo explicitamente.

    command.CommandText = comando;
    command.CommandType = CommandType.StoredProcedure;
    //...


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    • Marcado como respuesta Mauro Bravo lunes, 21 de agosto de 2017 23:01
    lunes, 21 de agosto de 2017 22:54

Todas las respuestas

  • Hola Mauro:

    Repasa las comillas simples y la coma normal en este trozo:

    exec sp_executesql N'sproc_AgregarArticulo',N'@vchNombre

    De entrada antes de @vchNombre, debe ir una coma ",".

    Comprueba esa sintaxis.

    Un saludo.

    Gemma

    lunes, 21 de agosto de 2017 10:56
  • Mauro Bravo,

    No comprendo el por que usas sp_Executesql para llamar un procedimiento almacenado.  El procedimiento lo puedes invocar desde .net (ADO.NET por ejemplo) usando un objeto SqlCommand tipo StoredProcedure poblando su colleccion de parametros.

    HOW TO: Call a Parameterized Stored Procedure by Using ADO.NET and Visual C# .NET

    De todas maneras esta es la forma en la que se deberia ejecutar el procedimiento si todavia insistes en usar sp_executesql.

    declare @p5 bigint;
    set @p5=NULL;
    exec sp_executesql N'sproc_AgregarArticulo @vchNombre, @vchDescription,  @binIdArticulo output', N'@vchNombre varchar(50), @vchDescripcion varchar(254), @binIdArticulo bigint output', @vchNombre='Mauro', @vchDescripcion='Descripcion', @binIdArticulo=@p5 output;
    select @p5;


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas

    lunes, 21 de agosto de 2017 12:26
  • Gracias a los dos por reponder. Desde la aplicacion .NET estoy usando un sqlCommand y sqlDataAdapter con sus respectivos parametros. No tengo codigo SQL hardcodeado. El "EXECUTE sp_executesql" que mostré es el que veo con el Sql Profiler. Paso imágenes de lo que tengo en .NET espero pueda brindar mas detalle.


    Mauro

    lunes, 21 de agosto de 2017 21:05
  • Todo lo que adjuntas es correcto, lo que falto es indicar como es que se debe interpretar el contenido de la propiedad 'CommandText', claro, se trata de un procedimiento almacenado pero eso no lo sabe el proveedor de datos, tú debes de indicarlo explicitamente.

    command.CommandText = comando;
    command.CommandType = CommandType.StoredProcedure;
    //...


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    • Marcado como respuesta Mauro Bravo lunes, 21 de agosto de 2017 23:01
    lunes, 21 de agosto de 2017 22:54
  • Gracias Williams por abrirme los ojos ante un error tan simple jejeje. Sos groso genio!

    Saludos


    Mauro

    lunes, 21 de agosto de 2017 23:03