Jump to content
aesp

[VB.NET] Problema com inserção de dados

Recommended Posts

aesp

Passa-se o seguinte, abaixo encontrasse o meu código de inserção de dados na minha base de dados em MySQL, não percebo o que se passa porque o código aparentemente está correcto, apenas o ExecuteNonQuery() é que está a dar erro, já tentei mudar o tipo de dados na base de dados para text mas sem sucesso também.

3498bv8.png

Obrigado,  :confused:

Share this post


Link to post
Share on other sites
Andrepereira9

Olha lá bem para a tua sintaxe SQL  :confused:

Abres um parênteses, mas não o fechas

Depois metes o nomes do campos dos valores a inserir com um '?', antes, mas depois quando declaras essas variáveis, não os metes

Tenta com a sintaxe assim:

Dim AddSQL As String = "Insert Into aluguer ([iDCliente], [iDAUTO], [DataInicio], [DataFim]) values (IDCliente, IDAuto, DataInicio, Datafim);"

PS: Termina sempre a sintaxe SQl com ; Senão estás sujeito a sofrer um ataque  SQL Injection


A informática chegou para resolver problemas que antes não existiam

Quem ri por último é porque está conectado a 52 Kbs.

Share this post


Link to post
Share on other sites
aesp

Pensei que no MySQL se usava o ?, pelo menos foi o que me disseram.  🤔

Edit: Continua a dar o mesmo erro,  :confused:

Share this post


Link to post
Share on other sites
Andrepereira9

Podes usar.

Em vez de pores o nome da variavel, metes só o ?

Dim AddSQL As String = "Insert Into aluguer ([iDCliente], [iDAUTO], [DataInicio], [DataFim]) values (?, ?, ?, ?);"

Depois só tens de adicionar os command.parameter.add...por ordem de introdução dos dados IDCliente, IDAUTO,...


A informática chegou para resolver problemas que antes não existiam

Quem ri por último é porque está conectado a 52 Kbs.

Share this post


Link to post
Share on other sites
aesp

Agora a mensagem de erro passou para, "Fatal error encountered during command execution.".

Será forma como as datas estão a ser inseridas estão correctas? Eu andei ali a tentar inventar como o MySQL mete yyyy-mm-dd, tive de jogar ali com os arrays.  🤔

Share this post


Link to post
Share on other sites
aesp

Epá, desculpem lá se não percebi as vossas dicas mas se era suposto ficar a assim, também não está a funcionar.  :confused:

2vuhag1.png

Share this post


Link to post
Share on other sites
bioshock

Sim...e o erro é?

Mais provável é estares com problemas nos campos Date.

Share this post


Link to post
Share on other sites
aesp

Sim...e o erro é?

Mais provável é estares com problemas nos campos Date.

Já tentei fazer uma inserção apenas com o IDCliente e IDAuto para não ter conflitos com as datas, chapéu. Também alterei as propriedades dos fields  date no mysql para text, nada também.

Share this post


Link to post
Share on other sites
aesp

O erro é o seguinte: "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[iDCliente], [iDAuto]) values (7, 18)' at line 1"

O código actual é:

        Dim AddSQL As String = "INSERT INTO aluguer([iDCliente], [iDAuto]) values (@IDCliente, @IDAuto);" '@DataInicio , @DataFim);"
        Dim Command As New MySqlCommand(AddSQL, ConnectionString)
        'Dim TimeDateInicio() As String = Split(DTPDataInicio.Value)
        'Dim DateElementsInicio() As String = Split(TimeDateInicio(0), "-")
        'Dim TimeDateFim() As String = Split(DTPDataFim.Value)
        'Dim DateElementsFim() As String = Split(TimeDateFim(0), "-")

        Command.Parameters.Add("@IDCliente", MySqlDbType.Int16).Value = TextBox1IDCliente.Text
        Command.Parameters.Add("@IDAuto", MySqlDbType.Int16).Value = TextBox2IDAuto.Text
        'Command.Parameters.Add("@DataInicio", MySqlDbType.Text).Value = DTPDataInicio
        'DateElementsInicio(2) & "-" & DateElementsInicio(1) & "-" & DateElementsInicio(0)
        'Command.Parameters.Add("@DataFim", MySqlDbType.Text).Value = DTPDataFim
        'DateElementsFim(2) & "-" & DateElementsFim(1) & "-" & DateElementsFim(0)

        Command.Connection.Open()
        'MsgBox("Data inicio: " & DateElementsInicio(2) & "-" & DateElementsInicio(1) & "-" & DateElementsInicio(0) & vbCrLf &
        '      "Data fim: " & DateElementsFim(2) & "-" & DateElementsFim(1) & "-" & DateElementsFim(0))
        Dim x As Integer = Command.ExecuteNonQuery() ' <- O erro é aqui

        If x < 1 Then
            MessageBox.Show("Erro ao adicionar", My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)
        Else
            MessageBox.Show("Adicionado com sucesso!", My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If
        Command.Connection.Close()

Share this post


Link to post
Share on other sites
aesp

Continua o mesmo erro, quanto ao tirar o ;, tal como o Andrepereira9 não fica vulnerável?  🤔

Share this post


Link to post
Share on other sites
bioshock

Tira-me os parêntesis rectos, não sei até que ponto o MySQL não é sensível.

Share this post


Link to post
Share on other sites
bioshock

Nunca ouvi tal coisa sobre isso que ele disse. Aliás, o facto de usares parâmetros já te precavê contra SQLi. No entanto, SQLi em aplicações..🤔 ;):)

Share this post


Link to post
Share on other sites
aesp

Tira-me os parêntesis rectos, não sei até que ponto o MySQL não é sensível.

Nem mais, eram os parêntesis rectos, quanto ao ; na query não afecta nada. Agora persiste o problema com as datas mas vou tentar resolve-lo.

Obrigado pela ajuda de todos  ;)

Edit: Já bomba tudo  :)

Share this post


Link to post
Share on other sites
Andrepereira9

Boas

Li isso neste artigo Macoratti

Apesar de ser mais para a Web, suponha-mos que a Aplicação desenvolvido pelo aesp, tem uma área de utilizadores 'Normais' e outra só para 'Admins', e o acesso, é feito através de uma página de login.  Segundo o artigo que li, se não tiver os ; no fim, dá para descobrir os dados de login.

Quanto aos parênteses Rectos, não sabia que davam problemas no MySQl.

Aprendi a fazer ligações à BD, através deste Site, e como usava os parênteses, eu sempre usei com Acess


A informática chegou para resolver problemas que antes não existiam

Quem ri por último é porque está conectado a 52 Kbs.

Share this post


Link to post
Share on other sites
bioshock

Até posso compreender o uso de ";" quando não são utilizados parâmetros, caso contrário é desnecessário.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.