visual C # how to solve the saving of my output

0

It does not let me save the auto id incretable. What do I do?

 public string insertar(DRegistro_Salida registro_salida)
    {
        string rpta = "";
        SqlConnection sqlCon = new SqlConnection();

        try
        {

            sqlCon.ConnectionString = conexion.Cn;
            sqlCon.Open();
            SqlCommand sqlcmd = new SqlCommand();
            sqlcmd.CommandText = "spinsertar_registro_salida";
            sqlcmd.CommandType = CommandType.StoredProcedure;
            sqlcmd.Connection = sqlCon;

            SqlParameter parid_salida = new SqlParameter();
            parid_salida.ParameterName = "@Id_salida";
            parid_salida.SqlDbType = SqlDbType.Int;
            parid_salida.Direction = ParameterDirection.Output;
            sqlcmd.Parameters.Add(parid_salida);

            SqlParameter parcentro = new SqlParameter();
            parcentro.ParameterName = "@Centro";
            parcentro.SqlDbType = SqlDbType.VarChar;
            parcentro.Size = 100;
            parcentro.Value = registro_salida.Centro;
            sqlcmd.Parameters.Add(parcentro);

            SqlParameter parid_pendencia = new SqlParameter();
            parid_pendencia.ParameterName = "@Id_dependencia";
            parid_pendencia.SqlDbType = SqlDbType.Int;
            parid_pendencia.Value = registro_salida.Id_dependencia;
            sqlcmd.Parameters.Add(parid_pendencia);

            SqlParameter parIdempleado = new SqlParameter();
            parIdempleado.ParameterName = "@Id_empleado";
            parIdempleado.SqlDbType = SqlDbType.Int;
            parIdempleado.Value = registro_salida.Id_empleado;
            sqlcmd.Parameters.Add(parIdempleado);

            SqlParameter parid_cliente = new SqlParameter();
            parid_cliente.ParameterName = "@Id_cliente";
            parid_cliente.SqlDbType = SqlDbType.Int;
            parid_cliente.Value = registro_salida.Id_cliente;
            sqlcmd.Parameters.Add(parid_cliente);

            SqlParameter pardescripcion = new SqlParameter();
            pardescripcion.ParameterName = "@Descripcion";
            pardescripcion.SqlDbType = SqlDbType.VarChar;
            pardescripcion.Size = 2000000;
            pardescripcion.Value = registro_salida.Descripcion;
            sqlcmd.Parameters.Add(pardescripcion);

            SqlParameter parmarca = new SqlParameter();
            parmarca.ParameterName = "@Marca";
            parmarca.SqlDbType = SqlDbType.VarChar;
            parmarca.Size = 50;
            parmarca.Value = registro_salida.Marca;
            sqlcmd.Parameters.Add(parmarca);


            SqlParameter parequipo = new SqlParameter();
            parequipo.ParameterName = "@Equipo";
            parequipo.SqlDbType = SqlDbType.VarChar;
            parequipo.Size = 50;
            parequipo.Value = registro_salida.Equipo;
            sqlcmd.Parameters.Add(parequipo);


            SqlParameter parelemento = new SqlParameter();
            parelemento.ParameterName = "@Elemento";
            parelemento.SqlDbType = SqlDbType.VarChar;
            parelemento.Size = 50;
            parelemento.Value = registro_salida.Elemento;
            sqlcmd.Parameters.Add(parelemento);


            SqlParameter parserie = new SqlParameter();
            parserie.ParameterName = "@Serie";
            parserie.SqlDbType = SqlDbType.VarChar;
            parserie.Size = 50;
            parserie.Value = registro_salida.Serie;
            sqlcmd.Parameters.Add(parserie);

            SqlParameter parmodelo = new SqlParameter();
            parmodelo.ParameterName = "@Modelo";
            parmodelo.SqlDbType = SqlDbType.VarChar;
            parmodelo.Size = 50;
            parmodelo.Value = registro_salida.Modelo;
            sqlcmd.Parameters.Add(parmodelo);


            SqlParameter parfecha_Salida = new SqlParameter();
            parid_salida.ParameterName = "@Fecha_salida";
            parid_salida.SqlDbType = SqlDbType.Date;
            parid_salida.Value = registro_salida.Fecha_salida;
            sqlcmd.Parameters.Add(parfecha_Salida);

            SqlParameter parfecha_entrega = new SqlParameter();
            parfecha_entrega.ParameterName = "@Fecha_entrega";
            parfecha_entrega.SqlDbType = SqlDbType.Date;
            parfecha_entrega.Value = registro_salida.Fecha_entrega;
            sqlcmd.Parameters.Add(parfecha_entrega);


            SqlParameter parmotivo = new SqlParameter();
            parmotivo.ParameterName = "@Motivo";
            parmotivo.SqlDbType = SqlDbType.VarChar;
            parmotivo.Size = 2000000;
            parmotivo.Value = registro_salida.Motivo;
            sqlcmd.Parameters.Add(parmotivo);


            SqlParameter parestado = new SqlParameter();
            parestado.ParameterName = "@Estado";
            parestado.SqlDbType = SqlDbType.VarChar;
            parestado.Size = 100;
            parestado.Value = registro_salida.Estado;
            sqlcmd.Parameters.Add(parestado);

            SqlParameter parfecha_devulucion = new SqlParameter();
            parfecha_devulucion.ParameterName = "@Fecha_devolucion";
            parfecha_devulucion.SqlDbType = SqlDbType.Date;
            parfecha_devulucion.Value = registro_salida.Fecha_devolucion;
            sqlcmd.Parameters.Add(parfecha_devulucion);



            rpta = sqlcmd.ExecuteNonQuery() == 1 ? "OK" : "no se ingreso el registro";


        }
        catch (Exception ex)
        {
            rpta = ex.Message;
        }
        finally
        {
            if (sqlCon.State == ConnectionState.Open) sqlCon.Close();
        }

        return rpta;
    }

Stored procedure:

ALTER proc [dbo].[spinsertar_registro_salida]
@Id_salida int output,
@Centro varchar(100),
@Id_dependencia int,
@Id_empleado int,
@Id_cliente int,
@Descripcion varchar(max),
@Marca varchar(50),
@Equipo varchar(50),
@Elemento varchar(50),
@Serie varchar(50),
@Modelo varchar(50),
@Fecha_salida date,
@Fecha_entrega date,
@Motivo varchar(max),
@Estado VARCHAR(100),
@Fecha_devolucion date
as

insert into Registro_Salida(centro,id_dependencia,id_empleado,id_cliente,descripcion,marca,equipo,elemento,serie,modelo,fecha_salidaa,fecha_entrega,motivo,estado,fecha_devolucion)
values(@Centro,@Id_dependencia,@Id_empleado,@Id_cliente,@Descripcion,@Marca,@Equipo,@Elemento,@Serie,@Modelo,@Fecha_salida,@Fecha_entrega,@Motivo,@Estado,@Fecha_devolucion )
SELECT @Id_salida = SCOPE_IDENTITY()
    
asked by Darwin 30.11.2018 в 03:10
source

1 answer

0

You have to assign the output parameter in the procedure

ALTER proc [dbo].[spinsertar_registro_salida]
@Id_salida int output,
@Centro varchar(100),
@Id_dependencia int,
@Id_empleado int,
@Id_cliente int,
@Descripcion varchar(max),
@Marca varchar(50),
@Equipo varchar(50),
@Elemento varchar(50),
@Serie varchar(50),
@Modelo varchar(50),
@Fecha_salida date,
@Fecha_entrega date,
@Motivo varchar(max),
@Estado VARCHAR(100),
@Fecha_devolucion date
as

insert into Registro_Salida(centro,id_dependencia,id_empleado,id_cliente,descripcion,marca,equipo,elemento,serie,modelo,fecha_salidaa,fecha_entrega,motivo,estado,fecha_devolucion)
values(@Centro,@Id_dependencia,@Id_empleado,@Id_cliente,@Descripcion,@Marca,@Equipo,@Elemento,@Serie,@Modelo,@Fecha_salida,@Fecha_entrega,@Motivo,@Estado,@Fecha_devolucion )

SELECT @Id_salida = SCOPE_IDENTITY() 

then from c # can recover it

 var rowAffected = sqlcmd.ExecuteNonQuery();

 var id = (int)parid_salida.Value;

 rpta = rowAffected == 1 ? "OK" : "no se ingreso el registro";

How to return Output parameter from Stored Procedure in ASP.Net using C # and VB.Net

You can also reduce the code a lot if you use

SqlConnection sqlCon = new SqlConnection(conexion.Cn);
sqlCon.Open();

SqlCommand sqlcmd = new SqlCommand("spinsertar_registro_salida", sqlCon);
sqlcmd.CommandType = CommandType.StoredProcedure;


sqlcmd.Parameters.Add("@Id_salida", SqlDbType.Int);
sqlcmd.Parameters["@Id_salida"].Direction = ParameterDirection.Output;

sqlcmd.Parameters.Add("@Centro", SqlDbType.VarChar, 100).Value = registro_salida.Centro;
sqlcmd.Parameters.Add("@Id_dependencia", SqlDbType.Int).Value = registro_salida.Id_dependencia;

//resto parametros

You can reduce 4 or 5 lines to just one, you do not need to assign everything in properties

    
answered by 30.11.2018 в 14:27