Passare il risultato di una query SQL a un altra pagina

mercoledì 31 ottobre 2012 - 08.54
Tag Elenco Tags  VB.NET  |  .NET 4.0  |  Windows 7  |  Visual Studio 2010

danielsan27 Profilo | Newbie

Ciao a tutti,
forse l'oggetto è un po contorto...vi spiego melgio cosa ho fatto e cossa voglio fare...
ho il risultato di una query sql che immetto in un datareader...fin qui tutto bene
vorrei passare il "risultato" di questa query ad un altra pagina web in modo da poter visualizzarne i risultati...ovvimanete evitando di ricostruire query e datareader pure in quella pagina nuova, per evitare di far 2 volte la stessa cosa...

una cosa del tipo

pagina1:

esecuzione sql
immisisone nel datareader
if datareader.hasrows then...vai alla pagina 2 (e passagli i risultati cosi che li visualizzo li)

Spero di essermi spiegato (scrivo da cani)

Saluti

ridaria Profilo | Expert

perdona la cazzata ovvia che dico:

Esegui la query direttamente nella pagina 2

:-(

Riccardo D'Aria

danielsan27 Profilo | Newbie

Nn ti preoccupare....
la query la devo fare per forza nella I pagina....la pagina 2 nn è altro che una schermata di dettaglio che mostra a video i risultati...
il controllo query lo faccio nella pagina I...se mi restituisce risultati..allora ridireziono alla pagina 2...senno la pagina 2 nn si deve proprio aprire
:)

ridaria Profilo | Expert

di getto mi viene questa:

metti i dati del data reader in una variabile di sessione e poi li leggi da pagina 2

essendo 2 o più record delimita ogni record con un marcatore il pipe "|" ed ogni campo del record con un altro marcatore il segno meno oppure punto e virgola.

Nella pagina due usi la funzione split per estrarre tutti i record e per ogni record una nuova split che ti prende i singoli campi.

é una tecnica che dovrebbe avere il vantaggio della velocità.

CHe ne pensi?




Riccardo D'Aria

algraps Profilo | Junior Member

Ciao,
potresti usare le session. Salvi il risultato della query nella pagina 1

Session["query"] = dataTable;

e poi leggi la session castandolo in datatable nella pagina2 ...
DataTable x = (DataTable)Session["query']

oppure utilizzando una cache in questo modo:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra


Cosa ne pensi?

Ciao
A.G.

danielsan27 Profilo | Newbie

Grazie x le risposte...sembrano tutit metodi interessanti...d'impatto mi sembra veloce e valido l'utilizzo delle session....
anche il metodo con le pipe & c....anche se nn ho capito bene come fare..ma il meccanismo si.
Domani mi metto al lavoro e vi tengo aggiornati
Grazie ancora

P.S. riguardo a passare la datatable via session.....va bene lo stesso se invece di una datatable..è un datareader??

ridaria Profilo | Expert

no deve essere un datatable!
Riccardo D'Aria

danielsan27 Profilo | Newbie

perfetto procedo...sono ancora alle prime armi :) penso sia simile al datareader cmq XD

danielsan27 Profilo | Newbie

Citazione di ALGRAPS:

Ciao,
potresti usare le session. Salvi il risultato della query nella pagina 1

Session["query"] = dataTable;
e poi leggi la session castandolo in datatable nella pagina2 ...
DataTable x = (DataTable)Session["query']

Fine citazione....

Ehm...non so usare la datatable...vi posto il mio codice con il datareader e mi dite gentilmente come usare la datatable al posto di datareader ..scusate ma sn alle prime armi...un esempio pratico urge :)

Sub cercaapp()
dbconn.Open()
sql = "SELECT * FROM RESIDENTI WHERE APPARTAMENTO = '" + TextBox1.Text + "'"
dbcomm = New OleDbCommand(sql, dbconn)
dbreadapp = dbcomm.ExecuteReader()
dbreadapp.Read()
If dbreadapp.HasRows Then
dbreadapp.Close()
dbconn.Close()
Response.Redirect("dett.aspx?SEARCH=" & TextBox1.Text & "&RESULT=" & TextBox1.Text)
End If
dbreadapp.Close()
dbconn.Close()
End Sub

..in pratica la pagina 2 che si deve sorbire il risultato della query è quella nel response.redirect ovvero DETT.ASPX

Grazie x la disponibilità

danielsan27 Profilo | Newbie

Allora ho smanettato un po ho modificato il codice inserendo un dataadapter e la datatable piu o meno cosi

Sub cercaapp()
dbconn.Open()
sql = "SELECT * FROM RESIDENTI WHERE APPARTAMENTO = '" + TextBox1.Text + "'"
dbcomm = New OleDbCommand(sql, dbconn)


dbreadapp = dbcomm.ExecuteReader()
dbreadapp.Read()
If dbreadapp.HasRows Then
Dim dt As New DataTable
Dim adp As New OleDbDataAdapter
adp.Fill(dt, dbreadapp)
Session("risultato") = dt
dbreadapp.Close()
dbconn.Close()
dt.Dispose()
adp.Dispose()
Response.Redirect("dett.aspx?SEARCH=" & TextBox1.Text & "&RESULT=" & TextBox1.Text)
End If
dbreadapp.Close()
dbconn.Close()
End Sub

MI DA ERRORE in runtime alla riga adp.fill(dt,dbreadapp) mi dice: L'oggetto non è un oggetto ADODB.RecordSet o un ADODB.Record.
Nome parametro: adodb

attendo il vs prezioso aiuto....

ridaria Profilo | Expert

Così dovresti popolare la dataTable:

Dim objCommand As SqlCommand
Dim objDataAdapter As SqlDataAdapter
Dim objDataTable As DataTable
objDataAdapter = New SqlDataAdapter
ConnessioneApri()
objCommand = New SqlCommand("SELECT " & pCampoTesto & ", " & pCampoValore & " FROM " & ptabella & " Where tipoSoggetto =1 order By " & pCampoTesto & " " & ordinamento, Conn)


'Initialize the DataAdapter object and set the SelectCommand property
objDataAdapter.SelectCommand = objCommand

'Initialize the DataTable object
objDataTable = New DataTable

'Populate the DataTable
objDataAdapter.Fill(objDataTable)

ConnessioneChiudi()


FAmmi sapere

Riccardo D'Aria

ridaria Profilo | Expert

..... e ci hai martellato ......
e ci vuoi far sapere se va bene?????
Riccardo D'Aria

algraps Profilo | Junior Member

>..... e ci hai martellato ......
>e ci vuoi far sapere se va bene?????
>Riccardo D'Aria

Carissimo riccardo. Prima di tutto parla al singolare. Dato che anch'io sto rispondendo al post mi sento tirato in ballo e quindi per favore quando scrivi usa sempre il singolare. Non mi sento "martellato"
Secondo un utente puo' scrivere quante domande vuole, fin quando non ha capito o non ha risolto il suo problema. Ci sono diversi livelli e una cosa puo' essere semplice per qualcuno e difficile per un altro. Quindi se ti stufi di rispondere, basta non rispondere e non trattare male gli utenti.
@danielsan27 continua pure a "martellarci" ... Saremo felici di risponderti.

Grazie
A.G.

danielsan27 Profilo | Newbie

LOL bella raga!!!!

Non litigate...son sicuro che il buon riccardo l'ha detto goliardicamente.....ci mancherebbe è un piacere chiedere a chi ne sa piu di me e soprattutto si è mostrato cosi disponibile come voi 2 :)))))))

Siete tuti e due entrambi preparati e cortesi..questo conta :)))

riccardo ti aggiorno appena smanetto su :)



ALLORA NON HO CAPITTO: dove metti la sql, all'ultimo hai scritto ", Conn" ..puoi spiegarti melgio x favore (esempio con codice sarebbe gradito)

Stesso dicasi per connesioneapri() e connesionechiudi()

:(

ridaria Profilo | Expert


>Carissimo riccardo. Prima di tutto parla al singolare. Dato che
>anch'io sto rispondendo al post mi sento tirato in ballo e quindi
>per favore quando scrivi usa sempre il singolare. Non mi sento
>"martellato"
Questo lo dici a danielsan che non ti senti martellato!

>Secondo un utente puo' scrivere quante domande vuole, fin quando
>non ha capito o non ha risolto il suo problema. Ci sono diversi
>livelli e una cosa puo' essere semplice per qualcuno e difficile
>per un altro. Quindi se ti stufi di rispondere, basta non rispondere
>e non trattare male gli utenti.
non mi stufo di rispondere anzi lo faccio con molto piacere .............

terzo: non volevo essere scortese, ma dal momento che pareva avesse fretta, e dal momento che il codice per popolare la datatable è funzionante, mi aspettavo almeno un cenno
tipo:
funziona, non funziona ù

che ne dici?????

CMQ se hai dei problemi scrivimi direttamente e non scrivere post inutili non attinanti all'argomento in quesyione:
ridaria@katamail.com




Riccardo D'Aria

danielsan27 Profilo | Newbie

x Riccardo...
non avevo letto la tua risposta delle 10 passate..ero intento a scrivere codice..tutto qui...

ho aggiornato la mia ultima risposta...ho un apio di problemini con Conn e connesionearpi e connessionechiudi

P.S. ripeto se qualcuno si sente "martellato" la finisco qui :(



Aggiornamento delle 12.46.....ho una connesione oledbcommand che va ovviamente a cozzare col sqlcommand...domanda: devo per forza usare sqlcommand per adoperare la datatable o posso usare anche oldbcommand??? se devo x forza usare sqlcommand devo ridisegnare la connessione.....

questo è il codice e ti dico dove sta l'errore (che ho capito ma che nn so risolvere)

dbconn.Open()
sql = "SELECT * FROM RESIDENTI WHERE APPARTAMENTO = '" + TextBox1.Text + "'"

Dim objCommand As OleDbCommand
Dim objDataAdapter As SqlDataAdapter
Dim objDataTable As DataTable
objDataAdapter = New SqlDataAdapter
objCommand = New OleDbCommand(sql, dbconn)

'Initialize the DataAdapter object and set the SelectCommand property
objDataAdapter.SelectCommand = objCommand <------------------DA ERRORE QUI: Errore 1273 Impossibile convertire il valore di tipo 'System.Data.OleDb.OleDbCommand' in 'System.Data.SqlClient.SqlCommand'. C:\Users\Administrator\Documents\Visual Studio 2010\WebSites\NUOVATC\torren.aspx.vb 45 40 C:\...\NUOVATC\
------------------------------------------------------------

'Initialize the DataTable object
objDataTable = New DataTable

'Populate the DataTable
objDataAdapter.Fill(objDataTable)

dbconn.Close()


AGGIORNAMENTO......................Ore 07.10 del 02.11.12 CI SONO RIUSCITO!!!!!!!!!!!!!!!!!!!!!!

Grazie ai vs consilgi che mi ha messo sulla giusta via....senza usare un dataadapter, avendo un db access ed una connessione oledb...carico il datareader e glielo passo cosi brutalmente ad una datatable creata lili'....cosi:
sql = "SELECT * FROM RESIDENTI WHERE APPARTAMENTO = '" + TextBox1.Text + "'"
dbcomm = New OleDbCommand(sql, dbconn)
Dim cmd As OleDbCommand = New OleDbCommand(sql, dbconn)
dbconn.Open()
Dim dr As OleDbDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)
Dim dt As DataTable = New DataTable()
dt.Load(dr)

e la datatable la posso tranquilamente "infilare" in una variabile di sessione...passandolgiela ad un altra pagina che se la prende al volo..vedendo il risultato della query anche in un altra pagina....

Grazie a tutti siete stati preziosissimi!!!
Saluti
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5