none
Problemas ao tentar introduzir dados em uma tabela do SQL Server

    Pergunta

  • Boa noite,

    Estou com uma dúvida que talvez seja uma dúvida de conceitos básicos de operações com banco de dados, porém não encontrei resposta no "Google" para o meu problema. Estou tentando inserir alguns dados em uma tabela.

    Alguns dados inseridos na tabela são inseridos diretamente da TextBox para a tabela. Outros dados são armazenados em variáveis para que seja possível realizar algumas operações matemáticas, e só então são inseridos na tabela. O problema está nos dados que são passados para as variáveis. Não consigo inserir esses dados.

    Tentei declarar as variáveis do vb.net como Numeric, como na tabela, mas não tem como. Tentei declarar como Double e depois converte-los para numeric, mas não consegui (não sei nem se tem como converter Double para Numeric). Tentei Declarar os dados numéricos da tabela como Float e inserir os dados Double sem converter, não consegui. Tentei declarar as variáveis do vb.net como Single para inserir na tabela, também não consegui.

    Minha dúvida é a seguinte: Como faço para inserir dados Double, ou Single, ou Long em uma tabela do SQL Server? 

    Segue o erro que está dando:

    System.InvalidCastException: 'A conversão da cadeia de caracteres 'INSERT INTO [dbo].[DadosViga](Ba' no tipo 'Double' não é válida.'
    FormatException: A cadeia de caracteres de entrada não estava em um formato correto.

    sábado, 13 de janeiro de 2018 00:43

Todas as Respostas

  • Olá Leonardo Amaral Scudellari

    Poste aqui a parte do código onde está tentando gravar.

     

    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    Rafael Almeida
    Microsoft Developer .NET
    Microsoft Certified Professional
    Development Leader at JAMSOFT Informática
    Email: ralms@ralms.net
    Blog -  GitHub  -  LinkedIn -  Twitter

    sábado, 13 de janeiro de 2018 01:36
  •  If Validate() Then
                sql = "INSERT INTO [dbo].[DadosViga](Barra, L, b, h, y1, y2, E, I, A, cdr, rvcdr1, rvcdr2, rm1cdr, rm2cdr, cdt1, cdt2, rv1cdt, rv2cdt, rm1cdt, rm2cdt) VALUES('" _
                    + ulpb + "','" _
                    + Me.L.Text + "','" _
                    + Me.b.Text + "','" _
                    + Me.h.Text + "','" _
                    + Me.y1.Text + "','" _
                    + Me.y2.Text + "','" _
                    + ModElas + "','" _
                    + MomIner + "','" _
                    + Area + "','" _
                    + cdr + "','" _
                    + rvcdr + "','" _
                    + rvcdr + "','" _
                    + rm1cdr + "','" _
                    + rm2cdr + "','" _
                    + cdt1 + "','" _
                    + cdt2 + "','" _
                    + rv1cdt + "','" _
                    + rv2cdt + "','" _
                    + rm1cdt + "','" _
                    + rm2cdt + "')"
    
    
                Dim con As New SqlConnection(strConexao)
                Dim cmd As New SqlCommand(sql, con)
    
                Try
                    con.Open()
                    cmd.ExecuteNonQuery()
                    con.Close()
                    con.Dispose()
                Catch ex As Exception
                    MsgBox(ex.Message)
                End Try
    
            Else
                MsgBox("Favor, inserir os dados corretamente!")
    
            End If
    Segue o código. Quando eu tento inserir apenas valores das TextBox, o código funciona bem, com as variáveis ele não está funcionando.
    sábado, 13 de janeiro de 2018 09:35
  • Bom dia , isso que  vc está fazendo pode ser melhorado , entes de proseguir ,da uma lida nesses posts,

    seu código atual está muito veraneável , facil para SQL INJECTIONS

    Artigos

    http://csharp-station.com/Tutorial/AdoDotNet/Lesson06

    https://www.devmedia.com.br/utilizando-parametros-no-sqlcommand-em-c/28440

    Segundo ponto ,  vc precisa de validar se os campos da tabela aceitam valores nulos ou não , e antes de mandar inserir no banco , vc precisa fazer essa validação,  

    exemplo supondo que o campo no banco de dados referente ao componente  (Me.L.Text) não aceite valores nulos, logo seria melhor fazer essa validação entes de mandar o banco de dados inserir.

    algo assim 

    if (string.IsNullOrWhiteSpace(Me.L.Text))
                {
            Mensagem de erro.
                }

    outro ponto , vc poderia via profile ,identificar o sql montado no seu código .



    Wesley Neves - Brasilia-DF     

    https://wesleyneves.wordpress.com/

    SELECT Tab.[that's me:]

    FROM

    (

        VALUES

            ('Wesley Neves'),

            ('Analista.NET'),

            ('Pós Graduando em Banco de Dados com ênfase em BI'),

            ('MTA -SQL Server'),

            ('MTA -Web Developed')

    ) AS Tab ("that's me:");


    "Se a resposta for útil ou ajudar ,não esqueça de marcar"




    • Editado Wesley Neves segunda-feira, 15 de janeiro de 2018 10:44 Complemento
    segunda-feira, 15 de janeiro de 2018 10:43
  • Boa tarde, Passei os últimos 3 dias mexendo em outro programinha (que vou acoplar neste), e só agora voltei a mexer nesse código. Mas consegui a resposta aqui (pelo menos parece que funcionou). Ao invés de utilizar o sinal de + entre as variáveis, utilizei o &. Deixei as textbox com sinal de + e as variáveis (ulpb, y1, y2 etc) com os &(s). Os valores estão aparecendo em uma das tabelas. Nao precisei converter nada, mas tive que alterar os dados para nvchar (depois vejo se isso vai dar problema na hora de resgatar os valores para fazer outras operações). O porém de tudo isso (talvez seja outra dúvida besta) é que os dados estão aparecendo apenas em uma tabela (na tabela que se encontra no banco de dados da pasta bin\debug). A tabela que se encontra na pasta do programa eu não estou conseguindo nem ter acesso. Está dando erro de login pro usuário. Acontece assim. Toda vez que crio um banco de dados e uma tabela, depois que executo o código a primeira vez, me aparece mais um banco de dados (na abaPesquisador de Objetos do SQL Server) igual ao primeiro que criei , com as mesmas tabelas. Na aba Gerenciador de Servidores eu continuo tendo apenas um banco de dados e apenas uma tabela. Os dados que insiro não aparecem na tabela do banco de de dados do Gerenciador Servidores (consigo abrir a tabela e visualizar todas as linhas nulas). A tabela que se encontra no DataSet que criei também permanece vazia. Alguém sabe o que está acontecendo? Alguém sabe se isso é normal? Alguém tem um tutorial para me indicar? Dos tutoriais que olhei pela internet para criar o banco de dados, nenhum deles mencionou que apareceria um outro banco de dados, e nem mesmo disseram que eu não conseguiria ter acesso a tabela de um deles. Obrigado pelas dicas Wesley, mas estou programando em vb.net. Mesmo assim vou guardar os links aqui para olhar depois que terminar o que estou fazendo.
    terça-feira, 16 de janeiro de 2018 19:37
  • Escrevi pelo celular e o meu texto apareceu em um parágrafo só. :/
    terça-feira, 16 de janeiro de 2018 19:39
  • Agora consegui ter acesso a tabela que se encontra no banco de dados da pasta do programa (acessando a aba lateral esquerda Pesquisador de Objetos do SQL Server, do Visual Studio), ela está vazia. Para constar, eu não alterei nada para conseguir o acesso, só cliquei com o botão direito do mouse sobre a tabela e pedi para ver os dados. Dessa vez o SQL me deixou ver o que tem ali dentro.
    terça-feira, 16 de janeiro de 2018 20:04