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.