Asp.net e ado.net

mercoledì 26 aprile 2006 - 15.30

leandro Profilo | Newbie

Ciao a tutti mi sono bloccato su un problema che in teoria è banale ma che non ho mai capito bene ho un tabella in un db access dove ho inseiriti degli indirizzi email.
Ora devo estrapolare questi indirizzi uno alla volta in modo di inviare delle emil fin quando non ho passato tutti i dati presenti nella mia tabella. in asp era tutto facile bastava usare un ciclo next con il movenexte e tutto era risolto ma ora come caspita si affronta questo problema io sono riuscito ad estrapolare il primo dato del primo record ma non so come procedere.
Dim dbconn As New OleDb.OleDbConnection("provider=microsoft.Jet.OLEDB.4.0; data source=" & Server.MapPath("../mdb-database/mydb.mdb"))
Dim dbcmd As New OleDb.OleDbCommand("select * from email", dbconn)
dbconn.Open()
Dim dr As OleDb.OleDbDataReader = dbcmd.ExecuteReader
dr.Read()
Dim io
If Not (dr("email") Is System.DBNull.Value) Then
io = dr("email")
Else
io = ""
End If
' invio dell'email
dr.Close()

Quello che vorrei ottenere è quello di inviare email e poi passare al record successivo fino a quando il db non sarà passato tutto per quanto riguarda l'invio dell'email è ok ma come faccio a dirgli di andare al record successivo e quindi all'indirizzo email successivo e poi uscire dal ciclo quando non ci sono più record ? Ringrazio tutti anticipatamente.

fguida Profilo | Expert

Credo che potresti usare un ciclo "do / while ", e fare la tua operazione fin quando il campo mail,non è vuoto. Ogni passaggio esegue il codice a te necessario. Che ne dici?

-----------------------
Francesco Guida
http://www.photographare.net

leandro Profilo | Newbie

si buona come idea ma come la realizzo ?

fguida Profilo | Expert

do
{ "qui inserisci il tuo codice" }

while
( datareader != null )

Praticamente esso andrà a ciclare fin quando il tuo datareader sarà valorizzato... ad esempio:

> dr.GetString(numeroCampo);


-----------------------
Francesco Guida
http://www.photographare.net

leandro Profilo | Newbie

Perdonami la mia ignoranza ma quindi tu come applicheresti quella funzione al mio modo di estrarre i dati dal Db:
Dim dbconn As New OleDb.OleDbConnection("provider=microsoft.Jet.OLEDB.4.0; data source=" & Server.MapPath("../mdb-database/mydb.mdb"))
Dim dbcmd As New OleDb.OleDbCommand("select * from email", dbconn)
dbconn.Open()
Dim dr As OleDb.OleDbDataReader = dbcmd.ExecuteReader
dr.Read()
Dim io
If Not (dr("email") Is System.DBNull.Value) Then
io = dr("email")
Else
io = ""
End If
' invio dell'email
dr.Close()

fguida Profilo | Expert

Sperando di non scriver idiozie...dato che non posso testare la cosa...e scrivo in c#...
utilizzeremo il while:

Dim dbconn As New OleDb.OleDbConnection("provider=microsoft.Jet.OLEDB.4.0; data source=" & Server.MapPath("../mdb-database/mydb.mdb"))

Dim dbcmd As New OleDb.OleDbCommand("select * from email", dbconn)
dbconn.Open()

Dim dr As OleDb.OleDbDataReader = dbcmd.ExecuteReader
dr.Read()

Dim io

> while ( Not dr(indicecampomail) Is System.DBNull.Value) (
>
> io = dr("email")
> ' invio dell'email
>
> end while


dr.Close()

Purtroppo utilizzo il c# come linguaggio, ed inoltre non posso verificare la cosa su pc al momento
Spero sia giusto...

-----------------------
Francesco Guida
http://www.photographare.net

leandro Profilo | Newbie

Ok il ciclo funziona ma non si sposta tra record come posso fare cioè mi spiego meglio il cursore rimane sempre sul medesimo record !!

alx_81 Profilo | Guru

il metodo read sposta già il puntatore.
Basta fare la condizione su di esso per ciclare

Dim dbconn As New OleDb.OleDbConnection("provider=microsoft.Jet.OLEDB.4.0; data source=c:\provamail.mdb;")
' devi cambiare il db, invece che utilizzare il server.mappath usa request.applicationpath che ti torna
' già il path dell'applicazione e da lì ti puoi muovere meglio, senza per forza specificare il file (come nella mappath)
Dim dbcmd As New OleDb.OleDbCommand("select * from email", dbconn)
dbconn.Open()
Dim dr As OleDb.OleDbDataReader = dbcmd.ExecuteReader
Dim io As String = ""
Do While dr.Read()
io = ""
If Not (dr("email") Is System.DBNull.Value) Then io = dr("email")
MsgBox(io)
Loop
' invio dell'email
dr.Close()
If dbconn.State = ConnectionState.Open Then dbconn.Close()
dbconn.Dispose()

Alx81 =)

leandro Profilo | Newbie

Tutto funziona perfettamente grazie mille !!!

alx_81 Profilo | Guru

di nulla!
ciao!
Alx81 =)
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5