whize13 Posted May 29, 2014 at 09:30 AM Report #557480 Posted May 29, 2014 at 09:30 AM 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
nelsonr Posted May 29, 2014 at 09:36 AM Report #557484 Posted May 29, 2014 at 09:36 AM (edited) Boas, experimenta alterar de NIFProf =1) para NIFProf) =1 Edited May 29, 2014 at 09:38 AM by nelsonr
edazevedo Posted May 29, 2014 at 09:37 AM Report #557485 Posted May 29, 2014 at 09:37 AM O ExecuteScalar devolve um object e não um inteiro, tens que fazer o cast
whize13 Posted May 29, 2014 at 09:43 AM Author Report #557490 Posted May 29, 2014 at 09:43 AM 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.
nelsonr Posted May 29, 2014 at 09:50 AM Report #557493 Posted May 29, 2014 at 09:50 AM 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?
whize13 Posted May 29, 2014 at 10:21 AM Author Report #557513 Posted May 29, 2014 at 10:21 AM 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.
edazevedo Posted May 29, 2014 at 10:29 AM Report #557517 Posted May 29, 2014 at 10:29 AM (edited) 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 May 29, 2014 at 10:34 AM by edazevedo
nelsonr Posted May 29, 2014 at 10:30 AM Report #557518 Posted May 29, 2014 at 10:30 AM 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
whize13 Posted May 29, 2014 at 10:42 AM Author Report #557520 Posted May 29, 2014 at 10:42 AM Mais uma vez muito obrigado!
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now