ERRO AO USAR PARÂMETROS

DAMASCENO.CESAR 08/09/2016 15:29:43
#466632
Boa tarde, seguindo exemplos tanto do VBM como de outros sites, montei consulta My-SQL com parâmetros e funciona lindamente, mas ao tentar usar esse mesmo esquema com oledb e banco Access (.mdb) os dados são inseridos de forma errônea, segue abaixo o codigo quer estou usando
  Dim sSql As String = [Ô][Ô]
Dim Conn As New OleDbConnection
Dim cmd As OleDbCommand
Conn.ConnectionString = AcessoDados.GetConnectionString([Ô][Ô])
cmd = New OleDbCommand
cmd.Connection = Conn
sSql = [Ô]UPDATE Diretoria SET Diretor1=@Diretor1, Cargo1=@Cargo1, Diretor2=@Diretor2, Cargo2=@Cargo2, [Ô] _
& [Ô]Diretor3=@Diretor3, Cargo3=@Cargo3 WHERE Diretor1=@Diretor1Vel AND Cargo1=@Cargo1Vel[Ô]
cmd.Connection.Open()
cmd.CommandText = sSql
cmd.Parameters.AddWithValue([Ô]@Diretor1[Ô], dscN.Diretor1)
cmd.Parameters.AddWithValue([Ô]@Diretor2[Ô], dscN.Diretor2)
cmd.Parameters.AddWithValue([Ô]@Diretor3[Ô], dscN.Diretor3)
cmd.Parameters.AddWithValue([Ô]@Cargo1[Ô], dscN.Cargo1)
cmd.Parameters.AddWithValue([Ô]@Cargo2[Ô], dscN.Cargo2)
cmd.Parameters.AddWithValue([Ô]@Cargo3[Ô], dscN.Cargo3)
[ô]-----
cmd.Parameters.AddWithValue([Ô]@Diretor1Vel[Ô], dscV.Diretor1)
cmd.Parameters.AddWithValue([Ô]@Cargo1Vel[Ô], dscV.Cargo1)
cmd.ExecuteNonQuery()
cmd.Connection.Close()
cmd.CommandText = Nothing
cmd.Connection = Nothing


obs: dscN e dscV são classes com os valores a serem lançados
os valores estão corretos Diretor com nome de diretor, cardo com cargo de diretor
se puderem me dizer onde estou errando....
KERPLUNK 08/09/2016 16:22:44
#466635
Difícil dizer o que está errado sem saber ao menos a mensagem de erro...
FFCOUTO 08/09/2016 16:45:32
#466640
Resposta escolhida
Os seus parâmetros devem seguir exatamente a ordem que está no comando SQL, portanto, você deve ter @Diretor1, @Cargo1, etc.
DAMASCENO.CESAR 08/09/2016 16:59:27
#466642
KERPLUNK, não dá mensagem de erro, salva os dados fora de ordem
vou fazer como o FFCOUTO falou pra ver se funfa
MESTRE 09/09/2016 07:50:32
#466655
Minha dica é você utilizar Try Catch e Finally quando abre e fecha a conexão com banco de dados..

Faça com o FCouto disse e aproveite para dar uma organizada também fica muito mais limpo seu código:

   Dim objCmd As New MySqlCommand(sql, objConexao) (< uso mysql)

objCmd.Parameters.AddWithValue([Ô]@Diretor1[Ô], [Ô]dscN.Diretor1[Ô])
objCmd.Parameters.AddWithValue([Ô]@Cargo1[Ô], [Ô]dscN.Cargo1[Ô])

Try
objConexao.Open()
objCmd.ExecuteNonQuery()
Catch ex As Exception
MessageBox.Show([Ô]Falha de conexão com Banco de Dados[Ô],[Ô]Aviso[Ô])
[ô]Messagebox.Show(ex.ToString)
Finally
objConexao.Close()

End Try
OCELOT 09/09/2016 09:57:27
#466659
é o que o FFCOUTO disse, o que acontece é que com o banco de dados do Access, apesar de você poder usar parâmetros nomeados na SQL ele na verdade não suporta isso, ele precisa é que todos os parâmetros estejam na ordem que está na SQL
DAMASCENO.CESAR 09/09/2016 15:39:43
#466668
Realmente OCELOT, segui a dica do FFCOUTO e resolveu o problema
Agora tenho quer me atentar para sempre que mexer com Access colocar os parametros em orderm rsrsrsrs
Tópico encerrado , respostas não são mais permitidas