CLR: .Net / Mono / Boo / Otros CLR > C#

 Un caso con int.Parse

(1/1)

jotae:
Mi codigo: (Visual Studio C# 2010) Access DB


--- Código: C# --- private void tbPagos_Click(object sender, EventArgs e){  iPosact = dgView.CurrentRow.Index;  pId = tc.Rows[iPosact]["id"].ToString();  pNombre = tc.Rows[iPosact]["nombre"].ToString();  int pSaldo = int.Parse(tc.Rows[iPosact]["saldo"].ToString()); //error en esta línea.  if (pSaldo == 0)    {     res = MessageBox.Show("No tiene saldos pendientes. ¿Desea anular un pago?", "Anular Pago", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);     if (res == DialogResult.No)        {          cargarDataGrid();          return;        }        Form pagos = new pagos();        pagos.ShowDialog();   } } 
El problema:

saldo es un campo numérico en la tabla. Si pSaldo es > 0, todo anda bien pero si el valor de pSaldo es 0 (cero), genera este error:

No se controló FormatException
La cadena de entrada no tiene el formato correcto.

gabio2:
Para empezar el int.Parse() NO funciona si tu decimal no es entero, es decir, antes de convertir tienes que redondearlo  puedes usar el Math.Round() para hacer eso, otro error típico, es cuando tu "saldo" es null, estás 100% seguro que te regresa algún valor?.. checalo guardando el valor en una variable de tipo Object y con tus puntos de interrupción.. ejemplo:


--- Código: C# --- Object _obj = tc.Rows[iPosact]["saldo"]; //No estoy seguro pero creo que debe tener una propiedad .Value, ejemplo: tc.Rows[iPosact]["saldo"].Value checalo..   
saludos espero te haya servido.. te recomiendo leer este link http://msdn.microsoft.com/es-es/library ... 95%29.aspx

jotae:
Gracias. De acuerdo a esto me puse a investigar y efectivamente el campo saldo en una tabla Access estaba definido como MONEY. Lo cambié a NUMBER y... voilá. Todo OK. Gracias gabio.  :good:

Navegación

[0] Índice de Mensajes

Ir a la versión completa