none
Actualizar registro de Base de datos sql server con c# en visual 2010

    Question

  • Hola a todos pues aca regreso jeje otra vez con problemitas, pues queria saber como hago para actualizar mi tabla yo posteriormente ya tengo un dato insertado y deseo actualizar ese dato con otro mas que el usuario quiera, aca les dejo el codigo tal como lo uso yo haber si me ayudan
     try
            {
              conexio.conectar();
              DateTime fec = Convert.ToDateTime(fecha);
              //actualizar el saldo, el debe o haber dependiendo de quien fue afectado
              if (esdebeohaber == 1)
              {
                updat = "UPDATE Mayor SET IdPeriodo='" + idperiodo + "',CodigoCuenta='" + codigocuentaprincipal + "',IdReferencia='" + referencia + "',Fecha='" +fec + "', Debe='" + saldo2.Text + "',Haber='0',Saldo='" + saldo2.Text + "' WHERE CodigoCuenta='" + codigocuentaprincipal + "'";
                SqlCommand comando = new SqlCommand(updat, conexio.conexion);
                
                comando.Parameters.AddWithValue("IdPeriodo", idperiodo);
                comando.Parameters.AddWithValue("CodigoCuenta", codigocuentaprincipal);
                comando.Parameters.AddWithValue("IdReferncia", referencia);
                comando.Parameters.AddWithValue("Fecha",fec);
                comando.Parameters.AddWithValue("Debe", saldo2.Text);
                comando.Parameters.AddWithValue("Haber", 0);
                comando.Parameters.AddWithValue("Saldo", saldo2.Text);
              }
              else
              {
                updat = "UPDATE Mayor SET IdPeriodo='"+idperiodo+"',CodigoCuenta='"+codigocuentaprincipal+"',IdReferencia='"+referencia+"',Fecha='"+fec+"', Debe='0',Haber='" + saldo2.Text + "',Saldo='" + saldo2.Text + "' WHERE CodigoCuenta='" + codigocuentaprincipal + "'";
                SqlCommand comando = new SqlCommand(updat, conexio.conexion);
                comando.Parameters.AddWithValue("IdPeriodo", idperiodo);
                comando.Parameters.AddWithValue("CodigoCuenta", codigocuentaprincipal);
                comando.Parameters.AddWithValue("IdReferncia", referencia);
                comando.Parameters.AddWithValue("Fecha", fec);
                comando.Parameters.AddWithValue("Debe", 0);
                comando.Parameters.AddWithValue("Haber", saldo2.Text);
                comando.Parameters.AddWithValue("Saldo", saldo2.Text);
              }
              
              adaptador = new SqlDataAdapter(updat, conexio.conexion);
              //adaptador.UpdateCommand.CommandText = updat;
              adaptador.Fill(tabl);
              tabl.AcceptChanges();
              saldo1.Text = saldo2.Text;
            }
            catch (SqlException ex)
            {
              MessageBox.Show(ex.Message);
            }
            conexio.cerrar();

    explico: conexio.conexion es una variable que contiene todos los datos para enlazar la base de datos,

    conexio.conectar es un metodo de la clase abrircerrar para abrir la conexion de bbdd;

    y bueno ahi tienen lo poco q e hecho pero no se al correr el programa trabaja bien pero no me actualiza:( q debo hacer? la tabla se llama Mayor y pues ese datatable solo lo referencio con la tabla mayor pero no funciona

     

    Sunday, October 31, 2010 2:45 AM

Answers

  • Creo que puedes hacerlo mas sencillo que eso, utilizando algo así:

     

     

     try
    
    
      {
    
    conexio.conectar();
    DateTime fec = Convert.ToDateTime(fechas);
    
    SqlCommand comando = new
    
     SqlCommand(updat, conexio.conexion);
    comando.Parameters.AddWithValue("@IdPeriodo"
    
    , idperiodo);
    comando.Parameters.AddWithValue("@CodigoCuenta"
    
    , codigocuentaprincipal);
    comando.Parameters.AddWithValue("@IdReferncia"
    
    , referencia);
    comando.Parameters.AddWithValue("@Fecha"
    
    , fec);
    
    if
    
     (esdebeohaber == 1)
     {
       
    comando.Parameters.AddWithValue("@Debe"
    
    , saldo2.Text);
    comando.Parameters.AddWithValue("@Haber"
    
    , 0);
    
     }
    
    else
    
     
     {
    
    comando.Parameters.AddWithValue("@Debe"
    
    , 0);
    comando.Parameters.AddWithValue("@Haber"
    
    , saldo2.Text);
    
     }
    
    comando.Parameters.AddWithValue("@Saldo"
    
    , saldo2.Text);
     
    comando.ExecuteNonQuery();
    
    //Limpia los parametros del SqlCommand

    comando.Parameters.Clear();
    conexio.cerrar(); //Invoco metodo para cargar Datos getDatos(); } catch (SqlException ex) { //Mensaje de excepcion } /* Declaro metodo getDatos que puedes utilizar para pasar los datos a un DataGridView <br/> y realizar pruebas para ver si actualiza todo bien. */ public void getDatos() { conexio.conectar(); var tabl = new DataTable("Mayor" ); adaptador = new SqlDataAdapter("SELECT * FROM Mayor" , conexio.conexion); adaptador.Fill(tabl); conexio.cerrar(); //En caso de que quieras visualizar en un DataGridView dataGridView1.DataSource = tabl; }

     

    Si esto no funciona, te recomiendo hacer un BreakPoint en la parte

    comando.ExecuteNonQuery();<br/>
    
    

    Verifica que los valores de las variables que estan pasandose por parametros estan llegando correctamente. En mi prueba actualizo todo bien tal y como esta ese código. Para verificar los parametros, pon el clic encima de  comando y luego haz clic en el simbolo de +, busca Parameters haces clic en el +, luego haces clic en el + de Non-Public members, luego haces clic en + de items, ahi veras todos los parametros que estas pasando, para ver el valor debes hacer clic en el +, cuando se despliege has en clic en el + de "base" y luego ahi buscas la clave "Value".

     

    Cualquier cosa me dejas saber.


    Willy Taveras.-
    • Marked as answer by victor_23 Sunday, October 31, 2010 8:47 PM
    Sunday, October 31, 2010 6:35 PM

All replies

  • Hola ya puse ese codigo despues leyendo me di cuenta tambien estaba erroneo yop:( pero a q te refieres haga otra consulta? un select? o

    te refieres a esto

    DataTable tabl=new DataTable("Mayor");

    adaptador=new SqlDataAdapter();

    adaptador.Update(tabl);

    asi? o a como te refieres ?

    Sunday, October 31, 2010 5:18 PM
  • Hola Willy

    te pongo el resto del codigo no se que pasa pero :( no lo actualiza te pondre la clase q incorpora la conexion

    tambien el codigo donde se realiza la actualizacion haber si me ves alguna falla por fa:(

    namespace AccountSystem
    {
    	public class abrircerrar
    	{
    		public abrircerrar()
    		{
    			
    		}
    		public SqlConnection conexion = null;
        public void conectar()
        {
          conexion = new SqlConnection("Data Source=" + @"localhost \SQLEXPRESS" + ";Initial Catalog=AccountSystem;Integrated Security=True");
       
          try
          {
            conexion.Open();
          }
          catch (System.Data.SqlClient.SqlException ex)
          {
            Console.WriteLine(ex.Message);
          }
        }
        public void cerrar()
        {
          conexion = new SqlConnection("Data Source=" + @"localhost \SQLEXPRESS" + ";Initial Catalog=AccountSystem;Integrated Security=True");
          try
          {
            conexion.Close();
          }
          catch (System.Data.SqlClient.SqlException ex)
          {
            Console.WriteLine(ex.Message);
          }
        }
    	}
    }

    este codigo anterior es la q implemento para la conexion

    ahora este que sigue es el que tu me ayudaste

    private void operacion_Click(object sender, System.Windows.RoutedEventArgs e) //realiza suma y traslado a la tabla mayor y diario
        {
          elementoseleccionado = elementoseleccionado - 1;
          string updat = null; DataSet ds = new DataSet();
          SqlCommand comando = null;
          if(elementoseleccionado==1)
          {
            try
            {
              conexio.conectar();
              DateTime fec = Convert.ToDateTime(fechas);
              //actualizar el saldo, el debe o haber dependiendo de quien fue afectado
              if (esdebeohaber == 1)
              {
                
                 updat = "UPDATE Mayor SET IdPeriodo=@IdPeriodo,CodigoCuenta=@CodigoCuenta,IdReferencia=@IdReferencia,Fecha=@Fecha, Debe=@Debe,Haber=@Haber,Saldo=@Saldo WHERE CodigoCuenta=@CodigoCuenta"; 
                comando = new SqlCommand(updat, conexio.conexion);
                comando.Parameters.AddWithValue("@IdPeriodo", idperiodo);
                comando.Parameters.AddWithValue("@CodigoCuenta", codigocuentaprincipal);
                comando.Parameters.AddWithValue("@IdReferencia", referencia);
                comando.Parameters.AddWithValue("@Fecha",fec);
                comando.Parameters.AddWithValue("@Debe", saldo1.Text);
                comando.Parameters.AddWithValue("@Haber", 0);
                comando.Parameters.AddWithValue("@Saldo", saldo1.Text);
                comando.ExecuteNonQuery();
                var tabl = new DataTable("Mayor");
                adaptador = new SqlDataAdapter("SELECT * FROM Mayor",conexio.conexion);
                adaptador.Fill(tabl);
                conexio.cerrar();
    
                //adaptador.Update(tabl);
                
              }
              saldo1.Text = saldo2.Text;
            }
            catch (SqlException ex)
            {
              MessageBox.Show(ex.Message);
            }
            conexio.cerrar();
          }
        }
        
      }

    Sunday, October 31, 2010 5:47 PM
  • Creo que puedes hacerlo mas sencillo que eso, utilizando algo así:

     

     

     try
    
    
      {
    
    conexio.conectar();
    DateTime fec = Convert.ToDateTime(fechas);
    
    SqlCommand comando = new
    
     SqlCommand(updat, conexio.conexion);
    comando.Parameters.AddWithValue("@IdPeriodo"
    
    , idperiodo);
    comando.Parameters.AddWithValue("@CodigoCuenta"
    
    , codigocuentaprincipal);
    comando.Parameters.AddWithValue("@IdReferncia"
    
    , referencia);
    comando.Parameters.AddWithValue("@Fecha"
    
    , fec);
    
    if
    
     (esdebeohaber == 1)
     {
       
    comando.Parameters.AddWithValue("@Debe"
    
    , saldo2.Text);
    comando.Parameters.AddWithValue("@Haber"
    
    , 0);
    
     }
    
    else
    
     
     {
    
    comando.Parameters.AddWithValue("@Debe"
    
    , 0);
    comando.Parameters.AddWithValue("@Haber"
    
    , saldo2.Text);
    
     }
    
    comando.Parameters.AddWithValue("@Saldo"
    
    , saldo2.Text);
     
    comando.ExecuteNonQuery();
    
    //Limpia los parametros del SqlCommand

    comando.Parameters.Clear();
    conexio.cerrar(); //Invoco metodo para cargar Datos getDatos(); } catch (SqlException ex) { //Mensaje de excepcion } /* Declaro metodo getDatos que puedes utilizar para pasar los datos a un DataGridView <br/> y realizar pruebas para ver si actualiza todo bien. */ public void getDatos() { conexio.conectar(); var tabl = new DataTable("Mayor" ); adaptador = new SqlDataAdapter("SELECT * FROM Mayor" , conexio.conexion); adaptador.Fill(tabl); conexio.cerrar(); //En caso de que quieras visualizar en un DataGridView dataGridView1.DataSource = tabl; }

     

    Si esto no funciona, te recomiendo hacer un BreakPoint en la parte

    comando.ExecuteNonQuery();<br/>
    
    

    Verifica que los valores de las variables que estan pasandose por parametros estan llegando correctamente. En mi prueba actualizo todo bien tal y como esta ese código. Para verificar los parametros, pon el clic encima de  comando y luego haz clic en el simbolo de +, busca Parameters haces clic en el +, luego haces clic en el + de Non-Public members, luego haces clic en + de items, ahi veras todos los parametros que estas pasando, para ver el valor debes hacer clic en el +, cuando se despliege has en clic en el + de "base" y luego ahi buscas la clave "Value".

     

    Cualquier cosa me dejas saber.


    Willy Taveras.-
    • Marked as answer by victor_23 Sunday, October 31, 2010 8:47 PM
    Sunday, October 31, 2010 6:35 PM
  • Gracias hermano me has salvado la vida me tenia pegado desde ayer esto:( pero jeje sorry a pesar de todo cometi errores jeje pero el mas comico cuando te conteste por 3era vez pues to si tu miras detalladamente el codigo yo puse saldo1.text y era obvio estaba actualizando el mismo valor que ya tenia puesto jeje asique eso no me dejaba actualizar pero ambos metodos estan perfectos ah por cierto no pude agregar al datagrid puesto que el que estoy usando es un DataGrid de la version 4.0 de wpf y aca es un poco diferente aun no comprendo como hacerle la insercion por codigo  pero vere me las ingeniare gracias Willy
    Sunday, October 31, 2010 8:50 PM