Ir para o conteúdo
karva

[Resolvido][VB.NET 2005] Ligação à base de dados access

Mensagens Recomendadas

karva    0
karva

Boas. Tenho o seguinte código:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If username.Text <> "" And password.Text <> "" Then
            Dim con As New OleDbConnection
            Dim com As New OleDbCommand
            Dim reader As OleDbDataReader
            con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=kvc.mdb"
            con.Open()
            com.Connection = con
            com.CommandText = "SELECT * FROM  utilizadores WHERE username='" & username.Text & "' AND password ='" & password.Text & "' "
            reader = com.ExecuteReader
            If reader.Read = True Then
                MsgBox("valid user name/password.")
            Else
                MsgBox("Invalid user name/password.")
            End If
            reader.Close()
            con.Close()
        Else
            MsgBox("Por favor preencha o seu nome de utilizador e password!")
        End If
    End Sub

e dá-me o seguinte erro nesta linha:

            reader = com.ExecuteReader

Não foi fornecido nenhum valor para um ou mais parâmetros necessários.

A ligação à base de dados é feita com sucesso, pois no form_load, ele verifica isso.

O que poderá ser?

BTW, como é que depois faço o retrieve dos dados para variáveis?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Revolt    1
Revolt

experimenta adicionar com.commandtype = text.

Para meteres os dados em variáveis:

If reader.hasLines Then
While reader.read
var = reader.item(0)
End While
End If

ou algo do género ;) agora n tenho aqui nenhum código :/

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
karva    0
karva

Hmm, se adiciono essa linha, ele retorna-me este erro:

Conversion from string "kVideoClub" to type 'Integer' is not valid.

Fiz algumas alterações, aqui fica o novo (as alterações não estão a afectar o que tá a dar erro):

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If username.Text <> "" And password.Text <> "" Then
            Dim con As New OleDbConnection
            Dim com As New OleDbCommand
            Dim reader As OleDbDataReader
            con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=kvc.mdb"
            con.Open()
            com.Connection = con
            com.CommandType = Text
            MsgBox("HERE")
            com.CommandText = "SELECT * FROM  utilizadores WHERE username='" & username.Text & "' AND password ='" & password.Text & "' "
            reader = com.ExecuteReader
            If reader.Read = False Then
                erro.Text = "Username ou password inválidos!"
            Else
                MsgBox("Invalid user name/password.")
            End If
            reader.Close()
            con.Close()
        Else
            MsgBox("Por favor preencha o seu nome de utilizador e password!")
        End If
    End Sub

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
karva    0
karva

Hmm, dá-me o mesmo erro que no inicio...

Já verifiquei, e a query está bem...

740542erro.png

Aqui fica a exception detail:

System.Data.OleDb.OleDbException was unhandled
  ErrorCode=-2147217904
  Message="Não foi fornecido nenhum valor para um ou mais parâmetros necessários."
  Source="Microsoft JET Database Engine"
  StackTrace:
       em System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
       em System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
       em System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
       em System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
       em System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior)
       em System.Data.OleDb.OleDbCommand.ExecuteReader()
       em kVC.login.Button1_Click(Object sender, EventArgs e) em C:\Users\Joao\Documents\Visual Studio 2005\Projects\kVC\kVC\login.vb:line 33
       em System.Windows.Forms.Control.OnClick(EventArgs e)
       em System.Windows.Forms.Button.OnClick(EventArgs e)
       em System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
       em System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       em System.Windows.Forms.Control.WndProc(Message& m)
       em System.Windows.Forms.ButtonBase.WndProc(Message& m)
       em System.Windows.Forms.Button.WndProc(Message& m)
       em System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       em System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       em System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
       em System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
       em System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
       em System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       em System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       em System.Windows.Forms.Application.Run(ApplicationContext context)
       em Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
       em Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
       em Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
       em kVC.My.MyApplication.Main(String[] Args) em 17d14f5c-a337-4978-8281-53493378c1071.vb:line 81
       em System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)
       em System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       em Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       em System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       em System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       em System.Threading.ThreadHelper.ThreadStart()

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Revolt    1
Revolt

tenta assim:

com.Connection = con
com.CommandType = CommandType.Text
com.CommandText = "SELECT * FROM  utilizadores WHERE username=@username AND password =@password "
com.Parameters.Add("@username", OleDb.OleDbType.Char, username.Text.Length).Value = username.Text
com.Parameters.Add("@password", OleDb.OleDbType.Char, password.Text.Length).Value = password.Text
con.Open()
reader = com.ExecuteReader

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Luan Figueiredo    0
Luan Figueiredo

Tive um problema parecido, mas no meu caso por ja estar utilizando um outro executereader() em alguma ooutra parte do prog... então usei com.Cancel()

aqui deu certo :cheesygrin:

Partilhar esta mensagem


Link 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