Jump to content

[Resolvido] Atribuição de valores de um consulta para uma variavel


whize13
 Share

Recommended Posts

Desculpem lá estar sempre a meter post é que nunca falei muito nesta matéria e estou em estágio e assim aproveito para adiantar a PAP(Prova de Aptidão Profissional). O erro é o seguinte "Incorrect syntax near '='." mas não entendo o porque

Private Sub btnLogin_Click(sender As Object, e As System.EventArgs) Handles btnLogin.Click
 Classe.ligacao.Open()
 Dim RegistoDados As SqlDataReader

 Dim queryContarProfs As New SqlCommand("SELECT COUNT(*) FROM Professores WHERE CCProf ='" & txbUser.Text & "' and PWDCOMPARE( '" & txbPass.Text & "', NIFProf =1)", Classe.ligacao)
 Dim teste As Integer
 teste = queryContarProfs.ExecuteScalar
 MsgBox(teste)
End Sub
Link to comment
Share on other sites

Muito bem, agora já me não me dá o erro e a msgbox aparece.

Com o ExecuteScalar devolve-me o valor 0, e o que eu pretendia era que me devolvesse 1 por isso mudei para ExecuteNonQuery e devolve o valor -1 não entendi a logica.

Link to comment
Share on other sites

Não mudes o comando sem perceberes para que serve.

Se o teu objectivo é ler o resultado do count(*), usa o ExecuteScalar.

O que o edazevedo quer dizer, é que o ExecuteScalar retorna uma variavel do tipo object, que estás a atribuir a uma variavel do tipo inteiro. Normalmente tem de se fazer o cast, mas julgo que o VB.NET faz isso automaticamente.

De qualquer maneira, se usando o ExecuteScalar retorna zero é porque não existem registos que preencham os requisitos do where.

Estás a comparar a password com o campo NIFProf, é mesmo o pretendido? Este campo está com hash?

Link to comment
Share on other sites

Sim é o pretendido, e sim o meu amigo encriptou o campo NIFProf porque será utilizado como password.Mas já resolvi o problema porque lhe liguei ele ele explicou-me uma coisa mal e então e estava a por dados a mais no nif que não devia e por isso retornar o 0. Mais uma vez um grande obrigado pois sem este Forum não aprenderia tanto e tornaria mais dificil a minha PAP. Ja agora o que entendem por objecto no que refere ao ExecuteNonQuery.

Link to comment
Share on other sites

http://msdn.microsoft.com/en-us/library/twcxd6b8.aspx

Por outras palavras, uma variável do tipo object pode ser de qualquer tipo, desde dados simples, como é o integer, a dados complexos como seja qualquer tipo de classe.

A chamada à função ExecuteScalar devolve dados do tipo object que devem ser convertidos para integer, long ou double dependendo dos valores esperados.

(corrigido depois de ver o post do nelsonr 😉 )

Edited by edazevedo
Link to comment
Share on other sites

Ja agora o que entendem por objecto no que refere ao ExecuteNonQuery.

Não é no ExecuteNonQuery, é no ExecuteScalar, o retorno é do tipo object.

O ExecuteScalar retorna o primeiro campo do primeiro registo que tiveres a executar.

Isso tanto pode ser uma data, um número, um texto, etc. Ou seja, o ExecuteScalar tem de permitir retornar qualquer tipo. Então usa o tipo object, que é o tipo base que engloba os outros todos.

O ExecuteNonQuery retorna sempre inteiro, que é o número de registos afetados pelo comando usado

Link to comment
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
 Share

×
×
  • 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.