none
Si existe un registro continuar y sino agregarlo en la base de datos por C# RRS feed

  • Pregunta

  • Buen día, 

    Tengo que hacer un programa que actualice el tipo de cambio para 10 empresas en distintos servidores que son: 
    - server001
    - server002
    - server003 (en este se engloban 8 empresas en distintas bases de datos.)

    Estoy trabajando con SQL SERVER 2008 y VS C# 2012.

    Quiero que al darle al botón Actualizar, verifique por bases de datos si ya existe el TipoCambio continué con las otras empresas en caso de que no exista el TipoCambio lo vaya actualizando o insertando respecto a su fecha y tipo de cambio

    En el programa siempre se actualiza con la fecha del día siguiente pero quiero corroborar eso que busque por la fecha y verifique que esta el tipo de cambio sino actualizarlo hasta que las 10 empresas se encuentren actualizadas con el tipo de cambio que corresponda.

    Espero me haya dado a entender y me puedan colaborar.
    Gracias.


    • Editado Cashmere VM jueves, 19 de abril de 2018 16:50
    jueves, 19 de abril de 2018 16:49

Respuestas

  • hola

    si tienes varias dbs podrias definir una lista de connectionstring de cada una, entonces iteras por cada una y aplicas las validaciones y actualizaciones

    la validacion haria un

    SELECT COUNT(*) FROM tabla where fecha = @fecha

    recuerda usar el ExecuteScalar() para obtener el valor del count

    si ya existe el cambio para esa fecha puede actualizarlo, usarias un UPDATE, sino existe la fecha harias un INSERT

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Cashmere VM jueves, 19 de abril de 2018 17:01
    jueves, 19 de abril de 2018 17:00
  • hola

    >>puse el connectionstring en el app.config

    vas a tener que definir diferente key para cada db, entonces vas cargando estas keys en una lista

    string[] connstringKeys = string[] {"conectionStringDB1", "conectionStringDB2"};

    iteras por cada una para realizar la operaciones


    >>o lo puedo poner en una clase para que solo en el botón llame la clase.

    lo puedes poner en una clase de la capa de datos, para que quede prolijo y separado el codigo, pero igual desde el boton vas a tener que lanzar la accion

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Cashmere VM jueves, 19 de abril de 2018 17:27
    jueves, 19 de abril de 2018 17:17
  • hola

    podrias usar

      string query = "SELECT COUNT(*) FROM ORTT WHERE Rate = @Rate";
      SqlCommand coman = new SqlCommand(query, conn);
      coman.Parameters.AddWithValue("@Rate", rate);
      conn.Open();
      int count = Convert.ToInt32(coman.ExecuteScalar());

    si defiens el count entonces el execute scalar devolver la cantidad de registros

    si es cero entonces no existe el registro

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Cashmere VM jueves, 19 de abril de 2018 18:06
    jueves, 19 de abril de 2018 17:55

Todas las respuestas

  • hola

    si tienes varias dbs podrias definir una lista de connectionstring de cada una, entonces iteras por cada una y aplicas las validaciones y actualizaciones

    la validacion haria un

    SELECT COUNT(*) FROM tabla where fecha = @fecha

    recuerda usar el ExecuteScalar() para obtener el valor del count

    si ya existe el cambio para esa fecha puede actualizarlo, usarias un UPDATE, sino existe la fecha harias un INSERT

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Cashmere VM jueves, 19 de abril de 2018 17:01
    jueves, 19 de abril de 2018 17:00
  • Gracias por la respuesta Leandro, puse el connectionstring en el app.config
    <add name= "conectionStringDB" connectionString= "User ID= sa; password= ; Data Source= server001; persist security info= True; Initial Catalog= empresa1; MultipleActiveResultSets= true;"/>
      
    <add name= "conectionStringDB" connectionString= "User ID= sa; password= ; Data Source= server002; persist security info= True; Initial Catalog= empresa2; MultipleActiveResultSets= true;"/>
        
    Pero no se como colocar lo del SELECT, UPDATE e INSERT. Eso iría en mi botón Actualizar?
    o lo puedo poner en una clase para que solo en el botón llame la clase.
    Espero me puedas ayudar con el código,

    Gracias.
    jueves, 19 de abril de 2018 17:13
  • hola

    >>puse el connectionstring en el app.config

    vas a tener que definir diferente key para cada db, entonces vas cargando estas keys en una lista

    string[] connstringKeys = string[] {"conectionStringDB1", "conectionStringDB2"};

    iteras por cada una para realizar la operaciones


    >>o lo puedo poner en una clase para que solo en el botón llame la clase.

    lo puedes poner en una clase de la capa de datos, para que quede prolijo y separado el codigo, pero igual desde el boton vas a tener que lanzar la accion

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Cashmere VM jueves, 19 de abril de 2018 17:27
    jueves, 19 de abril de 2018 17:17
  • Gracias Leandro por responderme.
    Tengo este código en mi botón:

    private void btnActualizar_Click(object sender, EventArgs e, double rate)
            {
                using (SqlConnection conn = new SqlConnection("server= (local); user id =cv; password= ; database= Empresa1"))
                {
                    string query = "SELECT * FROM ORTT WHERE [Rate] = @[Rate]";
                    SqlCommand coman = new SqlCommand(query, conn);
                    coman.Parameters.AddWithValue("[Rate]", rate);
                    conn.Open();
                    int count = Convert.ToInt32(coman.ExecuteScalar());
                    if (count == 0)
                    {
                        MessageBox.Show("Se modificaron los datos del artículo");
                        txbRate.Text = "";
                    }
                    else
                    {
                        MessageBox.Show("No existe un artículo con el código ingresado");
                        conn.Close();
                    }
                }
            }

    Pero no se como colocar que en cada if - else la conexión y actualizarlo desde donde se quedo la actualización del Tipo de Cambio

    if (  )
    {
        // SI EXISTE EL TIPO DE CAMBIO RESPECTO A LA FECHA, CONTINUAR CON LA SIGUIENTE EMPRESA
    }
    else
    {
        //SINO ACTUALIZAR EL TIPO DE CAMBIO 
    }
    
    y así por cada empresa y al finalizar la verificación lanzar un mensaje que ya han sido actualizados los tipos de cambio para las empresas. 

    Espero me haya dado a entender :/ 


    jueves, 19 de abril de 2018 17:50
  • hola

    podrias usar

      string query = "SELECT COUNT(*) FROM ORTT WHERE Rate = @Rate";
      SqlCommand coman = new SqlCommand(query, conn);
      coman.Parameters.AddWithValue("@Rate", rate);
      conn.Open();
      int count = Convert.ToInt32(coman.ExecuteScalar());

    si defiens el count entonces el execute scalar devolver la cantidad de registros

    si es cero entonces no existe el registro

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Cashmere VM jueves, 19 de abril de 2018 18:06
    jueves, 19 de abril de 2018 17:55
  • Muchas gracias era lo que buscaba me ayudo de esa forma.
    Gracias, en caso de tener alguna otra duda, te preguntare.

    Gracias Leandro!! 
    jueves, 19 de abril de 2018 18:06
  • Buenos días, espero puedan ayudarme
    Tengo una pregunta, sobre lo mismo solo que quiero me dejaron hacer,

    Ya que son 10 empresas quisiera hacer con puros if anidados que si al ejecutar y actualiza las 3 primeras empresas y se detiene el programa (por error de red o se haya ido la luz, lo que sea) al volver a ejecutar el programa debe actualizar el tipo de cambio hasta la 4 empresa o donde se haya quedado el programa actualizando antes de suceder algun error.
    No se si es hacer conexiones a la base de datos en if anidados

    Espero me haya dado a entender. Gracias

    • Editado Cashmere VM viernes, 27 de abril de 2018 16:45
    viernes, 27 de abril de 2018 15:33