locked
Erro de truncamento de string RRS feed

  • Pergunta

  • Estou desenvolvendo um aplicativo para Windows Phone 7 e estou com um problema de truncamento de string no momento do envio de dados para o banco. Estou utilizando um banco de dados SqlCompact.

    O erro é o seguinte: String truncation: max=30, len=35, value='System.Windows.Controls.ListBoxItem'.

    Os dados que quero lançar no banco são 4 dados de textBox e 2 de listBox. O erro se dá no método SubmitChanges() do DataContext.

    O código:

    using (var ctx = new ProjetoControleDeGastosDataContext(conn))
                    {
                         Gasto g = new Gasto()
                        {
                            Id_usuario = idUsuario,
                            Tipo_gasto = lstTipoDeGasto.SelectedItem.ToString(),
                            Valor = Convert.ToDecimal(txtValor.Text),
                            Data = Convert.ToDateTime(txtData.Text),
                            Descricao = txtDescricao.Text.ToString(),
                            Forma_pgto = lstFormaDePagamento.SelectedItem.ToString()
                        };

                        ctx.Gastos1.InsertOnSubmit(g);
                        try
                        {
                            ctx.SubmitChanges();
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message, "Erro", MessageBoxButton.OK);
                        }

                        NavigationService.GoBack();
                    }

    Agradeço desde já.

    terça-feira, 12 de junho de 2012 14:09

Respostas

  • Henrique,

    Quando você utiliza o código lstTipoDeGestao.SelectedItem.ToString(), por exemplo, é retornado o nome da classe que está sendo utilizada para realizar o bind das informações, neste caso está retornando System.Windows.Controls.ListBoxItem. Consequentemente ele está dando erro pois está tentando gravar 35 caracteres, em um campo do seu banco que aceita apenas 30.

    Não sei se vai resolver de cara, pois não temos detalhes de como está fazendo o binding das informações, mas tente o seguinte:

                     using (var ctx = new ProjetoControleDeGastosDataContext(conn))
                     {
                          Gasto g = new Gasto()
                         {
                             Id_usuario = idUsuario,
                             Tipo_gasto = ((ListBoxItem)lstTipoDeGasto.SelectedItem).Content.ToString(),
                             Valor = Convert.ToDecimal(txtValor.Text),
                             Data = Convert.ToDateTime(txtData.Text),
                             Descricao = txtDescricao.Text.ToString(),
                             Forma_pgto = ((ListBoxItem)lstFormaDePagamento.SelectedItem).Content.ToString()
                         };
     
                        ctx.Gastos1.InsertOnSubmit(g);
                         try
                         {
                             ctx.SubmitChanges();
                         }
                         catch (Exception ex)
                         {
                             MessageBox.Show(ex.Message, "Erro", MessageBoxButton.OK);
                         }
     
                        NavigationService.GoBack();
                     }
    []s

    Thiago J. Mônaco
    MVP Windows Phone Development
    MCP, MCAD, MCSD, MCDBA, MCTS, MCPD and MCT Professional
    Scrum Developer I and Professional Scrum Master
    http://www.windowsphonebrasil.net
    @thiagojmonaco

    terça-feira, 12 de junho de 2012 16:05

Todas as Respostas

  • Henrique,

    Quando você utiliza o código lstTipoDeGestao.SelectedItem.ToString(), por exemplo, é retornado o nome da classe que está sendo utilizada para realizar o bind das informações, neste caso está retornando System.Windows.Controls.ListBoxItem. Consequentemente ele está dando erro pois está tentando gravar 35 caracteres, em um campo do seu banco que aceita apenas 30.

    Não sei se vai resolver de cara, pois não temos detalhes de como está fazendo o binding das informações, mas tente o seguinte:

                     using (var ctx = new ProjetoControleDeGastosDataContext(conn))
                     {
                          Gasto g = new Gasto()
                         {
                             Id_usuario = idUsuario,
                             Tipo_gasto = ((ListBoxItem)lstTipoDeGasto.SelectedItem).Content.ToString(),
                             Valor = Convert.ToDecimal(txtValor.Text),
                             Data = Convert.ToDateTime(txtData.Text),
                             Descricao = txtDescricao.Text.ToString(),
                             Forma_pgto = ((ListBoxItem)lstFormaDePagamento.SelectedItem).Content.ToString()
                         };
     
                        ctx.Gastos1.InsertOnSubmit(g);
                         try
                         {
                             ctx.SubmitChanges();
                         }
                         catch (Exception ex)
                         {
                             MessageBox.Show(ex.Message, "Erro", MessageBoxButton.OK);
                         }
     
                        NavigationService.GoBack();
                     }
    []s

    Thiago J. Mônaco
    MVP Windows Phone Development
    MCP, MCAD, MCSD, MCDBA, MCTS, MCPD and MCT Professional
    Scrum Developer I and Professional Scrum Master
    http://www.windowsphonebrasil.net
    @thiagojmonaco

    terça-feira, 12 de junho de 2012 16:05
  • Funcionou sim Thiago, 

    Muito obrigado pela ajuda.

    segunda-feira, 25 de junho de 2012 17:37