Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

duduml

problemas com manipulação de dados no PostGreSQL [Resolvido]

Mensagens Recomendadas

duduml

Bom dia,

estou presentemente a desenvolver uma aplicação que liga a uma BD PostGreSQL, mas, não estou a conseguir resolver alguns problemas a nível de inserção e selecção de dados...

eu já li e vi alguns tutoriais do jpaulino, e tentei adaptar para a minha situação, mas sem sucesso...

em baixo deixo um dos erros que me aparecem...

2qcox3q.png

alguém me pode ajudar se faz favor?

Desde já, muito obrigado!  ;)

Cumprimentos,


"use windows, você merece!"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
renafi

À primeira vista, dá-me a entender que estás a enviar valores que não são válidos para os campos da tabela.

Examina o comando em si, e confirma se os valores que estás a enviar são suportados pelo tipo dos campos da tabela. E já agora, não sei até que ponto é que tens de fazer a conversão dos valores.

ex: No parametro @numero, que é um Integer, estás a enviar o conteúdo da textBox...


Oracle Certified Professional - AdministraçãoOracle Certified Professional - Pl/sqlMCPD - Microsoft Certified Professional DeveloperMCTS - Microsoft Certified Technology Specialist

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
duduml

hum....

ok. obrigado. vou analisar tudo então...então como faço para converter os dados?

cumps


"use windows, você merece!"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Primeiro detecta-os.

Confere o tipo de dados das colunas e do que estás a enviar como parâmetros.

Só depois é que decides como e o quê, vais converter.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
duduml

bem, só o problema for por causa disto...

command.Parameters.Add("@número", NpgsqlTypes.NpgsqlDbType.Integer).Value = numeroTextBox1.Text

digo que o número é inteiro, mas a textbox retorna um array de caracteres!!!  :angry1:

é devido a isso?? como devo fazer??'


"use windows, você merece!"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Integer.Parse(numeroTextBox1.Text)

Para além disso, eu até me arrepio quando vejo caracteres especiais como o que tens como nome de parâmetro.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Exactamente isso: número.

Até pode ser que pape, mas não está correcto.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Eu continuo a ver asneira no screenshot.

Estás a mandar texto para Boolean.

Mesma história:

Boolean.Parse()


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
duduml

tenho assim:

command.Parameters.Add("@numero", NpgsqlTypes.NpgsqlDbType.Integer).Value = Integer.Parse(numeroTextBox1.Text)
        command.Parameters.Add("@nome", NpgsqlTypes.NpgsqlDbType.Varchar).Value = nomeTextBox2.Text
        command.Parameters.Add("@consultar", NpgsqlTypes.NpgsqlDbType.Boolean).Value = Boolean.Parse(consultarCheckBox1.Text)


"use windows, você merece!"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Podes também parametrizar uma query sem fornecer os tipos, o que já evita erros de "instinto".

E agora que vejo melhor, acho que o Add não devolve nada.

Há um overload do Add que não tem datatype. Experimenta parametrizar com:

command.Parameters.Add("@numero",Integer.Parse(numeroTextBox1.Text))

Estou a fazer isto de cabeça. O que está no blog do jpaulino está correcto de certeza e sendo assim experimenta só não fornecer o datatype nos argumentos do Add.

Posso estar a fazer confusão com o método de adicionar parâmetros do meu DataGate, que é o que uso diáriamente :)

EDIT: Quando são checkboxes, queres é a propriedade Checked e não Text.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
duduml

pois, mais um erro (estupido) o tal checked....peço desculpa....xD

bem, mas agora ja me da erro diferente...vou experimentar com a consulta parametrizada...

cumps


"use windows, você merece!"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
duduml

se puser isso:

command.Parameters.Add("@numero",Integer.Parse(numeroTextBox1.Text))

dá-me este warning:

Warning	1	'Public Function Add(parameterName As String, value As Object) As Npgsql.NpgsqlParameter' is obsolete: 'Do not call this method. Use AddWithValue instead.'.	


"use windows, você merece!"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Aí tens a resposta:

"Use AddWithValue instead"


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Mas agora já é erro de síntaxe.

Volta a olhar para o comando SQL com olhos de ver, especialmente ao pé de parêntesis rectos, ao que parece :)

Ou mete aqui o comando para darmos uma olhadela.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
duduml

Dim x As Integer = command.ExecuteNonQuery()
        If x < 1 Then
            MessageBox.Show("A operação efectuada não retomou qualquer resultado.")
        End If

a coisa esta-se a compor....se conseguir resolver isto, devo fazer a aplicação toda rápido!

xD


"use windows, você merece!"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Quando digo comando SQL, quero dizer aquilo ao que tu parece que chamas "instrucção".

Se o erro é de síntaxe, queremos ver a query/comando/instrucção e não um ExecuteNonQuery :)


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
duduml

ups....desculpa...:S eu é que já estou cansado...:S

Dim myConnectionString As String = ("Server=127.0.0.1;Port=5432;User Id=postgres;Password=postgres;Database=controlo;")
        Dim SQL As String = "INSERT INTO Utilizadores([numero], [nome], [consultar], [inserir], [administrar], [codigo]) VALUES (@numero, @nome, @consultar, @inserir, @administrar, @codigo)"

        ' Cria uma nova ligação à base de dados
        Dim connection As New NpgsqlConnection(myConnectionString)

        ' Criação do comando indicando a instrução e a ligação
        Dim command As New NpgsqlCommand(SQL, connection)

        ' Indicação dos parâmetros que serão inseridos
        command.Parameters.AddWithValue("@numero", Integer.Parse(numeroTextBox1.Text))
        command.Parameters.AddWithValue("@nome", nomeTextBox2.Text)
        command.Parameters.AddWithValue("@consultar", consultarCheckBox1.Checked)
        command.Parameters.AddWithValue("@inserir", inserirCheckBox2.Checked)
        command.Parameters.AddWithValue("@administrar", AdministrarCheckBox3.Checked)
        command.Parameters.AddWithValue("@codigo", codigoTextBox3.Text)

        ' Abre a ligação, executa o comando e guarda em "x" o número de registos inseridos
        connection.Open()

        Dim x As Integer = command.ExecuteNonQuery()
        If x < 1 Then
            MessageBox.Show("A operação efectuada não retomou qualquer resultado.")
        End If

        ' Fecha a ligação e limpa as variáveis
        connection.Close()
        connection = Nothing
        command = Nothing


"use windows, você merece!"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Assim de repente, separa o parentesis do Utilizadores

Utilizadores([numero]

Utilizadores ([numero]


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.