• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

karva

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

13 mensagens neste tópico

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 :/

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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()

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o meu código tinha um typo. Verifica se escreveste Lenght (typo) ou Length (correcto) :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

é capaz de ter sido ao contrário porque aqui escreveste bem e 'Length' é membro de string

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Epa, era mesmo como eu tinha escrito aqui no fórum.

Problem solved.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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:

0

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