Dtagridview con query

mercoledì 17 marzo 2010 - 17.27

fabiana83 Profilo | Newbie

Scusate mi è partito l'invo, nel titolo volevo mettere Datagridview con query con join.... chiedo scusa
Ciao a tutti,
ancora qui per chiedervi un ulteriore aiuto...
Nella mia più completa ignoranza sto cercando di popolare una datagridview con dati estrapolati da un db sql. Parzialmente ci sono riuscita o meglio ho capito il funzionamento ma non capisco una cosa: è possibile popolare la datagridview se la query sql è una join tra + tabelle? Perchè se faccio una query semplice la datagridview si riempie, viceversa se uso una query con delle join la datagridview rimane vuota.
Questo è il codice:
con.ConnectionString = "stringa connessione"
con.Open()
adapter = New System.Data.SqlClient.SqlDataAdapter("query semplice", con)
adapter.Fill(dataset, "MiaTabella")
GridView.DataSource = dataset.Tables("MiaTabella")

Se invece metto questa query:
("SELECT TDocumento.documento, TComDoc.data_penale FROM TComDoc INNER JOIN TDocumento ON TComDoc.fk_documento = TDocumento.id_documento WHERE TComDoc.fk_commessa =" & id_commessa & " AND TComDoc.penale = 'True' ORDER BY TDocumento.documento", con)

dove id_commessa è una variabile integer che trovo da ciò che viene selezionato in una combobox, la datagridview rimane vuota.
Sto sbagliando qualcosa vero?
Help me please...
Grazie mille

Gho5t Profilo | Junior Member

dovresti andare nel database e provare ad eseguire la query che hai postato così da vedere se ci sono effettivamente delle righe oppure non c'è niente... se cambiando soltanto il testo della query prima visualizzava dei risultati ed ora non più al 99% è colpa della query che è sbagliata...

fabiana83 Profilo | Newbie

Ciao,
grazie per la risposta. Credo che in realtà il problema sia nella query, o meglio se io sostituisco "& id_commessa & ad un valore la datagridview effettivamente si popola.
Non capisco come fare a passargli questa variabile che è un interger. Io sapevo che x passare una variabile di tipo integer la sintassi è
WHERE TComDoc.fk_commessa ="& id_commessa
ovvero chiudo le vrigolette della query, & variabile
Così facendo però se continuo la query con l'AND e successivamente l'ORDER BY, mi viene sottolineata la query segnalando l'errore che la query si aspetta una chiusura e formatta il testo in nero (anzichè rosso) dopo le virgolette di chiusura.
Per cui ho messo il secondo & e le virgolette ma così facendo credo di indicare che id_comessa sia una stringa e forse non mi da nessun risultato x quello, può essere?
Spero di esser riuscita a spiegarmi...

Gho5t Profilo | Junior Member

tendo ad escludere la storia dell'integer-stringa come dici... tu devi passare una query all'SqlDataAdapter... una query è sempre e comunque una stringa (quindi anche se la tua variabile è integer è ovvio che viene convertita in una stringa)... se la query funziona sul DB deve per forza funzionare sull'SqlDataAdapter...
se il campo fk_commessa nella tabella TComDoc è di tipo integer, la query come hai fatto tu dovrebbe andare bene e dovrebbe funzionare tutto correttamente...
a questo punto non vorrei che valorizzi malamente la variabile id_commessa prima di arrivare in quel punto (tipo che ha valore 0 o un altro valore che non ha corrispondenze nel DB)...

presumo che il tuo progetto sia in VB.NET, prova a creare la query su una variabile di tipo string e solo dopo passarla all'SqlDataAdapter
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
metti un breakpoint sulla riga
adapter = New System.Data.SqlClient.SqlDataAdapter(query, con)
e, quando ci arrivi in debug, verifica il valore della variabile query e prova a far eseguire la query sul DB... così dovresti capire il perché non ti funziona...

fabiana83 Profilo | Newbie

Ciao,
si il progetto è in vb.net scusami non l'ho specificato.
Pur dichiarando la query come stringa e passandola poi all'SqlDataAdapter il problema rimane xkè evidenzia l'errore proprio nella query.

"SELECT TDocumento.documento, TComDoc.data_penale FROM TComDoc INNER JOIN TDocumento ON TComDoc.fk_documento = TDocumento.id_documento WHERE TComDoc.fk_commessa =" &id_commessa " AND TComDoc.penale = 'True' ORDER BY TDocumento.documento"

Mi sottolinea infatti il pezzo di query da "AND .... in poi dandomi come errore "End of statement expected"

Bo non saprei, mi viene da pensare che sto sbagliando l'uso delle virgolette...

Gho5t Profilo | Junior Member

il problema è che ti sei dimenticata un & dopo id_commessa...
così funziona e non dovrebbe darti più quell'errore:
"SELECT TDocumento.documento, TComDoc.data_penale FROM TComDoc
INNER JOIN TDocumento ON TComDoc.fk_documento = TDocumento.id_documento
WHERE TComDoc.fk_commessa =" & id_commessa & " AND TComDoc.penale
= 'True' ORDER BY TDocumento.documento"

fabiana83 Profilo | Newbie

Ahhh cavolo, è da ieri che tolgo e metto & virgolette e non riuscivo a trovare la soluzione giusta..
Grazie mille davvero
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