none
Hola soy estudiante y tengo un dilema RRS feed

  • Pregunta

  • Estoy trabajando en BD sql compct 4.0 y como saben no utiliza procedimientos almacenados , bueno lo necesito para hacer un campo Alfanumerico que autoincremente, lo logre pero no puedo adaptarlo a C# y eso el lo que necesito para completar mi programa este es el procedimiento:

    CREATE PROCEDURE SP_CODIGO_Holaxxx
    AS
        BEGIN
            DECLARE @CADENA AS VARCHAR(10);
            SET @CADENA = 'NCL';
            DECLARE @num INT;
            SET @num =
            (
                SELECT ISNULL(MAX(Numero), 0) + 1
                FROM prueba1
            );
    
    
            SELECT @CADENA + RIGHT(CAST((POWER(10, 4) + @NUM) AS VARCHAR(5)), 4);
    
            RETURN;
    
    
        END;

    Necesito ayuda porfavor


    viernes, 14 de junio de 2019 18:59

Todas las respuestas

  • hola

    >>trabajando en BD sql compct 4.0 y como saben no utiliza procedimientos almacenados

    no entiendo entonces que quieres hacer sino podras llevarese procedure a la db sql compact

    >>necesito para hacer un campo Alfanumerico que autoincremente,

    porque alfanumerico que incremente, si tiene que hacer eso es porque has diseñado de forma incorrecta

    debrias tener dos campos separados, uno para las letra y otro para el secuencial, pero va separado no en el mismo campos

    despues si quieres mostrarlo al usuario lo unes en un string usando codigo

    pero en la tabla son dos campos

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 14 de junio de 2019 19:38
  • ya intente lo que me dijiste pero no me funciono, intete tambien concatenar los dos campos me funciono pero en sql , entonces cuando lo pase a c# no me funciono, el error decia "sql compact no reconoce la instrucion CONCAT"  y no pude hacer mas, lo que quiero es hacer ese mismo procedimiento almacendo pero a base de codigos c# se que se puede por que eh visto procedimientos de credos en c#, la verdad tengo dos dias en ese preblema intentando, tambien intente hacer un campo identity y hacer una columna con "Max" y que cuando le de al datagrid me tire el resultado de la consulta del Max pero no se como concatenarlo con un string...

    solo quiero un manera de pasar ese precedimiento almacenado a c# y que funcione

    sábado, 15 de junio de 2019 3:46
  • hola

    lo que entiendo es que estas mezclando muchas cosas

    - si defines un campo identity o sea autoincremental, no tienes que usar para nada el Max, ya que se supone el secuencal se genera cuando realizas el INSERT

    - si usas un campo simples numerico, puedes usar el Max para obtener el siguiente valor

       SELECT ISNULL(MAX(Numero), 0) as MaxNro FROM prueba1

    para eso usas el ExecuteScalar()

    string query = "SELECT ISNULL(MAX(Numero), 0) as LastId FROM prueba1";
    SqlCommand command = new SqlCommand(query, conexion);
    
    int lastId = Convert.ToIn32(command.ExecuteScalar());

    - Para concatenerar lo puedes realizar en codigo c#, no tiene que ser dentro de la query, aunque la verdad no entiendo porque aplicas un POWER

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    sábado, 15 de junio de 2019 4:45
  • mira para ver si me entiendes, yo quiero generar un codigo cada vez que le de a un boton como es ese codigo "B0000221" o algo asi ese codigo es un orden de compra y cada vez que yo realize un compra me debe de aumentar el codigo osea se le debe de sumar uno el problema es que contines una letra por eso no se me suma  eso es lo que quiero hacer ya me estoy partiendo la cabeza eh hecho de todo y investigo y no aparece nada si pudiera pasar ese procedimiento a c# o de alguna manera hacerlo desde c# con cualquier control

    pero no se que mas hacer

    sábado, 15 de junio de 2019 15:34
  • pero un autoincremental con una letra no tiene sentido

    pregunta la B cambia???? cuando sea 222 sera una C.???

    si no es asi quita la B y crea un campo autoincremental en tu base de datos. solo de tipo entero

    si en tu cliente, me refiero a tu app. ya sea winform, wpf web etc. Alli recibes el ID y si lo quieres mostrar con una B pues se lo agregas y ya

    Recuerda tomar el camino mas rapido y mas sencillo a un problema es algo muy importante a la hora de desarrollar.

    lunes, 17 de junio de 2019 15:23
  • hola

    >>mira para ver si me entiendes, yo quiero generar un codigo cada vez que le de a un boton como es ese codigo "B0000221" o algo asi

    te entiendo muy bien, ese codigo puede generarlo sin problemas, pero no se persiste informacion compuesta en una columna de la db, eso rompe con las formas de normalizacion

    en la tabla debe crear dos columna, una para el valor B y otra para el 221, entonces para obtener la actual y poder sumarle uno usarias

    SELECT MAX(ColumnaNumerica) FROM Tabla WHERE ColumnaLetra = 'B'

    a ese valor le sumas 1 y generas el siguiente registro

    Si quieres darle formato usarias

    txtCodigo.Text = string.Format("{0}{1:0000000}", valorLetra, valorNumero);

    con esto completarias los ceros delante del numero para presentar el valor al usuario, pero solo sirve para eso, presentar, cuando persistes los datos se guardan simples para poder trabajarlos

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 18 de junio de 2019 4:26