Problema datagridview c# con visual studio express 2010

martedì 14 giugno 2011 - 18.18
Tag Elenco Tags  C#  |  .NET 4.0  |  Windows XP  |  Visual Studio Express  |  Firefox

redevil1983 Profilo | Newbie

Salve a tutti , innanzitutto complimenti per il forum ...

Il mio problema è che praticamente devo far visualizzare in un datagridview il risultato di una query ( che può essere una o più righe)
Sono nuovo nel mondo di C# (ma non nuovo alla programmazione) ma mi sto scimunendo a far funzionare sti cosi!!! :D
Il codice incriminato è il seguente :

private void cerca_nome_Click(object sender, EventArgs e)
{
String sala = cbSale.Text;
String nome = textBox_nome.Text;
String sCerca = textBox1.Text;
dataGridView1.Visible = true;
string sql = "Select * from liste where sala='" +sala +"' AND cognome LIKE '" + nome + "' AND data='" + sCerca + "';";
DataSet ds = new DataSet();

try
{
using (SQLiteConnection conn = new SQLiteConnection(connString))
{
using (SQLiteDataAdapter da = new SQLiteDataAdapter(sql, conn))
{
da.Fill(ds);
dataGridView1.DataSource = ds.Tables[0].DefaultView;
}
}
}
catch (Exception err)
{
{
}
}
}

praticamente io inserisco un nome (me lo cerca in cognome, ha una sua logica nel contesto :D) e lui mi restituisce le righe con tutti i risultati della query.
Il problema è che sintatticamente mi sembra corretto il codice soltanto che il datagridview non visualizza assolutamente nulla .... senza ovviamnete restituirmi alcun errore ....

Potete darci uno sguardo ed aiutarmi a capire come cavolo è che non funziona ?

Utilizzo visual studio 2010 express e un db SQLite.
Non vorrei ricorrere all'installazione di visual studio professional vorrei continuare ad utilizzare l'express....



P.S. successivamente dovrei anche poter modificare i vari campi dal datagridview e salvarli direttamente sul db, ma per il momento mi accontenterei soltanto di visualizzarli correttamente ....

grazie mille in anticipo :D

Gluck74 Profilo | Guru

ciao redevil1983,
ti devo dire che ci sono 2 errori di base nel tuo codice:
il primo problema è che dovresti mettere i simboli % nella query e considerare anche i valori null.
Ad esempio se tu cerci SOLO per nome, il parametro sala sarà stringa vuota. Quindi il pezzo di query che scrivi si trasforma così:

sala='" +sala +"' diventa sala=''
quindi se hai i record con il campo sala a null, non vengono presi.

Idem se cerchi il nome "antonio" ma nel campo hai "Antionio Giustelli"
la query dovrebbe essere:
cognome LIKE '" + nome + "%'

il secondo, ma non per importanza, è la creazione di query mediante concatenazione di stringhe. NON SI FA!!!!!
È un problema di sicurezza. Per documentarti cerca su google l'argomento "SQL Injection".

per risolvere dovresti utilizzare i parametri per l'oggetto SqlCommando.
In questo posto puoi vedere un piccolo esempio:
http://forum.html.it/forum/showthread.php?s=&threadid=1463070

per risolvere i due problemi, ecco un esempio di codice che legge i dati dalla tabella Employees di NorthWnd
public DataTable getImpiegati(string city, string country, int idImpiegato) { string sSQL = @"SELECT * FROM [Employees] where (City=@city or @city is null) and (Country=@country or @country is null) and (EmployeeID=@ID OR @ID is null)"; SqlParameter par1 = new SqlParameter("city", SqlDbType.VarChar); SqlParameter par2 = new SqlParameter("country", SqlDbType.VarChar); SqlParameter par3 = new SqlParameter("ID", SqlDbType.Int); par1.Value = (!string.IsNullOrEmpty(city) ? city : (object)DBNull.Value); par2.Value = (!string.IsNullOrEmpty(country) ? country : (object)DBNull.Value); par3.Value = (idImpiegato != 0) ? idImpiegato : (object)DBNull.Value; return new getDataTable(sSQL, new SqlParameter[] { par1, par2, par3 }); } public DataTable getDataTable(string sSQL, params IDataParameter[] parms) { DataTable ds = null; SqlDataAdapter adapter = null; SqlCommand cmd = null; try { conn.Open(); cmd = new SqlCommand(sSQL, conn); cmd.CommandType = CommandType.Text; if (parms != null) foreach (SqlParameter par in parms) { cmd.Parameters.Add(par); } //cmd.Parameters.AddWithValue("@city", city); //cmd.Parameters.AddWithValue("@country", country); adapter = new SqlDataAdapter(cmd); ds = new DataTable(); adapter.Fill(ds); adapter.Dispose(); } catch (Exception ex) { throw new Exception(ex.Message); } finally { conn.Close(); } return ds; }

____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

redevil1983 Profilo | Newbie

Ciao , senti allora per quanto riguarda il problema della sicurezza ti dico subito che per questa appliczione mi interessa poco ecco perchè non mi sono preoccupato del problema ...

Per quanto riguarda il % nella query ti posso assicurare che non è necessario perchè i nomi inseriti sono sicuramente precisi , e poi la cosa è in versione alfa quindi per il momento mi interessa principalmente far funzionare il tutto ...

In ogni caso l'ho inserito il % ed ho provato ad eseguire , niente da fare ....

Mi fa vedere solo l'area del datagrid tutta in grigio mentre se cerco vuoto mi fa vedere il datagrid con tutte le intestazioni che io cerco ...

bah!

Qualcuno di voi sa come configurare Sqlite come origine dati in visual studio professional ? Magari poi gliela imposto direttamente dal datagrid e tagliamo la testa al toro ...

grazie cmq dei consiglio ...
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