commandtext dataAdapter aanpassen tijdens runtime

Status
Niet open voor verdere reacties.

Trixt3r

Gebruiker
Lid geworden
2 mei 2007
Berichten
8
Omschrijving:
Ik heb een windowsform met daarop 2 objecten: combobox en een datagridview.
De datagridview geeft data weer uit een database. De combobox gebruik ik om deze data te filteren. Ik heb gekozen om dit te doen aan de hand van SQL.
Mijn werkwijze is dat wanneer de waarde van de combobox wijzigt, ik een nieuwe dataAdapter maak om de nieuwe gegegevens (gefilterde gegevens) uit de database te halen. Dit werk zonder problemen.

Vraag:
Kan ik dit doen zonder een nieuwe dataAdapter te maken en door gewoon de commandtext van de reeds bestaande dataAdapter te wijzigen? Ik probeerde dit op de volgende manier, maar dit werkt niet. De datagridview wordt opnieuw gevuld met beginwaarden (ongefilterde gegevens). M.a.w. de commandtext is niet aangepast, en de gegevens worden weer opgehaald aan de hand van de SQLcommand die tijdens designtime aan de dataAdapter werd toegekend.

dataset.tabel.clear()
sql as string = "SELECT .....
dataAdapter.connection.connectionstring.createcommand.commandtext = sql
dataAdapter.fill(dataset.tabel)

In een boek heb ik volgende manier teruggevonden:
dataset.tabel.clear()
OleDbSelectCommand.CommandText = sql
OleDbDataAdapter.Fill(dataset.tabel)

Wat ik me hier afvraag. Hoe kennen ze die command toe aan de dataAdapter? Hoe weet de dataAdapter dat deze nieuwe command voor hem is bedoeld en dat hij deze nu moet gebruiken? Er wordt geen enkele link gegeven tss command en dataAdapter.
 
Door aan de commandtext de query toe te wijzen, weet de datadapter om welke select het gaat:
Code:
	sql as string = "SELECT .....
	[B][U][COLOR="Red"]dataAdapter[/COLOR][/U][/B].connection.connectionstring.createcommand.commandtext = [B][U][COLOR="Red"]sql[/COLOR][/U][/B]

Via die query in "sql" weet de dataset hoe de tabel te vullen:
Code:
	dataAdapter.fill(dataset.tabel)
Als je de data wilt filteren, doe je dat door aan de query SqlParameters toe te voegen,
en dan voor elke parameter een waarde mee te geven.


Code:
'voorbeeld:

SqlConnection connection = new SqlConnection(connectionString);
connection.Open();

' (naam is varchar, leeftijd is integer)
string query = "SELECT naam, leeftijd from persoon where naam >= @beginletter And leeftijd < @leeftijd " ;

SqlCommand command = new SqlCommand(Query);
command.Connection = connection;


SqlParameter par = new SqlParameter("@beginletter", SqlDbType.NVarChar);
command.Parameters.Add(par);

SqlParameter par = new SqlParameter("@leeftijd", SqlDbType.Int);
command.Parameters.Add(par);


command.Parameter["@beginletter"].Value = "B"  ;
command.Parameter["@leeftijd"].Value = 23 ;

SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = command;
DataSet ds = new DataSet();
DataTable dt = new DataTable();
ds.Tables.Add(dt);
adapter.Fill(ds.Tables[0]);

connection.Close();
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan