43 messaggi dal 22 ottobre 2007
sto creando la sezione newsletter nel mio sito ma quando passo il valore del database mi da errore in esecuzione e mi dice:

The '{Microsoft Access Driver (*.mdb)}' provider is not registered on the local machine

che devo fare ?


sto usando ADO.NET, questa la porzione di codice dove ho errore:

Dim str As String = "Provider={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("database.mdb")

cn = New OleDbConnection(str)

cn.Open()

Modificato da luis_figo il 31 ottobre 2008 14.47 -
652 messaggi dal 21 gennaio 2007
Contributi
prova ad utilizzare OleDb


Dim str As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("database.mdb") 

cn = New OleDbConnection(str) 

cn.Open() 
43 messaggi dal 22 ottobre 2007
ok grazie.
lo avevo utilizzato anche prima ma non avevo messo un percorso corretto forse ;)

ho un altro problema.. nel momento in cui il compilatore deve eseguire la query di inserimento mi da errore su dr.Read(): 'Object reference not set to an instance of an object'

ecco il mio codice:
' Creo un oggetto connection, command  e datareader del namespace OleDB
        Dim cn As OleDbConnection
        Dim cmd As OleDbCommand
        Dim dr As OleDbDataReader

        ' Apro la connessione
        Dim str As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("App_Data\database.mdb")
        cn = New OleDbConnection(Str)
        cn.Open()

        ' verifico se l'email inserita esiste o meno
        cmd = New OleDbCommand("SELECT email FROM newsletter WHERE email LIKE '" & Email.Text & "'", cn)
        
        ' Se l'utente decide di iscriversi...
        If I.Checked Then
            If (dr.Read()) Then
                ' ...se l'email non esiste effettuo la registrazione
                dr = cmd.ExecuteReader("INSERT INTO newsletter (email) VALUES ('" & Email.Text & "')")
                Messaggio.Text = "Registrazione effettuata con successo"
            Else
                ' ...oppure lancio un messaggio di avviso
                Messaggio.Text = "Sei già iscritto alla Newsletter"
            End If
            dr.Close()
            cn.Close()
            Exit Sub
        End If

Modificato da luis_figo il 31 ottobre 2008 16.16 -
652 messaggi dal 21 gennaio 2007
Contributi
l'errore viene scatenato perchè la variabile "dr" è nulla.

poi, ci sono un pò di errorini qua e la. Per fare quello che devi, bisogna:
1- leggere il risultato della prima query di selezione
2- se quest query NON ha dei risultati, allora faccio l'insert

quindi:

' Creo un oggetto connection, command  e datareader del namespace OleDB 
Dim cn As OleDbConnection 
Dim cmd As OleDbCommand 
Dim dr As OleDbDataReader 

' Apro la connessione 
Dim str As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("App_Data\database.mdb") 
cn = New OleDbConnection(Str) 
cn.Open() 

' verifico se l'email inserita esiste o meno 
cmd = New OleDbCommand("SELECT email FROM newsletter WHERE email LIKE '" & Email.Text & "'", cn) 
       
' Se l'utente decide di iscriversi... 
If I.Checked Then 
     rd = cmd.ExecuteReader()
     If (!dr.HasRows) Then 

          Dim cmd2 As New OleDbCommand("INSERT INTO newsletter (email) VALUES ('" & Email.Text & "')", cn)
          cmd2.ExecuteNonQuery()
           
          Messaggio.Text = "Registrazione effettuata con successo" 
     Else 
          ' ...oppure lancio un messaggio di avviso 
          Messaggio.Text = "Sei già iscritto alla Newsletter" 
     End If 
     dr.Close()
End If
cn.Close() 

Modificato da PeppeDotNet il 31 ottobre 2008 16.24 -
43 messaggi dal 22 ottobre 2007
grazie per avermi corretto gli errori, ma non mi riconosce (!dr.HasRow)
mi dice: Leading '!' can only appear inside a 'With' statement

cioè?
43 messaggi dal 22 ottobre 2007
vabbè tagliamo la testa al toro: inverto le istruzioni dell'if con le istruzioni dell'else
luis_figo ha scritto:
non mi riconosce (!dr.HasRow)

Perché il resto è scritto in VB.NET
L'operatore "!" nei linguaggi C-like è il "not"; sostituisci la riga incriminata con:
If (Not dr.HasRows) Then 

HTH

Matteo Casati
GURU4.net
652 messaggi dal 21 gennaio 2007
Contributi
m.casati ha scritto:

Perché il resto è scritto in VB.NET


scusate, è la forza dell'abitudine..

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.