Sökfunktion från datasource C# Asp.net

Trädvy Permalänk
Medlem
Plats
127.0.0.1
Registrerad
Jun 2016

Sökfunktion från datasource C# Asp.net

Hej!

Jag gör ett söksystem, där man kan söka efter ett företag som:
I vilket län dom finns
Ifall företaget erbjuder montering
- Har elektriker
- Har skylift

Om jag söker på ett företag som har montering och skylift, men endast väljer ett alternativ av dom två så får jag inget resultat.
Söker jag på både montering och skylift, DÅ får jag upp företaget.

Jag vill alltså kunna välja tex, elektriker, men även om företaget har både skylift och montering så skall det ju ändå komma upp.

Koden bakom

protected void Button1_Click(object sender, EventArgs e) { SqlDataSource1.SelectCommand = "SELECT [companyName], [companyEmpoly], [companyState], [companyAccepted] FROM[company_Profile] WHERE (([knowledgeElectric] = @knowledgeElectric) AND ([knowledgeMount] = @knowledgeMount) AND ([knowledgeSkylift] = @knowledgeSkylift) AND ([companyState] = @companyState))"; Session["secomp_State"] = stateDropDownList.SelectedValue; if (knowElectricCheckBox.Checked == true) { SqlDataSource1.SelectParameters["knowledgeElectric"].DefaultValue = "yes"; } if (knowMountCheckBox.Checked == true) { SqlDataSource1.SelectParameters["knowledgeMount"].DefaultValue = "yes"; } if (knowSkylfitCheckBox.Checked == true) { SqlDataSource1.SelectParameters["knowledgeSkylift"].DefaultValue = "yes"; } if (knowElectricCheckBox.Checked == false) { SqlDataSource1.SelectParameters["knowledgeElectric"].DefaultValue = "no"; } if (knowMountCheckBox.Checked == false) { SqlDataSource1.SelectParameters["knowledgeMount"].DefaultValue = "no"; } if (knowSkylfitCheckBox.Checked == false) { SqlDataSource1.SelectParameters["knowledgeSkylift"].DefaultValue = "no"; } }

På frontend

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:catenappConnectionStringProjectselect %>"> <SelectParameters> <asp:parameter name="knowledgeElectric" type="String" /> <asp:parameter name="knowledgeMount" type="String" /> <asp:Parameter Name="knowledgeSkylift" type="String" /> <asp:SessionParameter Name="companyState" SessionField="secomp_State" Type="String" /> </SelectParameters> </asp:SqlDataSource>

Har jag gjort nåt helt galet?

[ASUS X99-DELUXE] - [i7 5960X] - [48 GB Corsair Dominator Platinum] - [ASUS ROG 780TI] - [ Kingston HyperX Predator 480GB PCI-E ] - [ 12TB 4x3TB WD RED SERIES ] - [Some SSD ~1TB] - [ASUS ROG PG278Q] - [Corsair AX1200i] - [Corsair Hydro Series H115i]

Trädvy Permalänk
Hedersmedlem
Plats
Linköping
Registrerad
Apr 2004

Nu kan jag inte asp.net, men blir verkligen

(([knowledgeElectric] = @knowledgeElectric) AND ([knowledgeMount] = @knowledgeMount) AND ([knowledgeSkylift] = @knowledgeSkylift) AND ([companyState] = @companyState))

som du tänkt dig om du sätter en till true och en till false? Då du testar alla fält kommer bara poster där en är true och den andra false returneras snarare än alla poster där den första är true. Kanske måste du ha olika frågor för olika fall (eller ha ett tredje tillstånd)?

Trädvy Permalänk
Medlem
Plats
127.0.0.1
Registrerad
Jun 2016

@Elgot:

Ja jag funderar med på det, men nu har jag bara gjort en liten del av programmet och jag kan inte tänka mig, med tanke på att allt annat finns så bra lösningar till, att man ska behöva sitta och göra en för varje.

[ASUS X99-DELUXE] - [i7 5960X] - [48 GB Corsair Dominator Platinum] - [ASUS ROG 780TI] - [ Kingston HyperX Predator 480GB PCI-E ] - [ 12TB 4x3TB WD RED SERIES ] - [Some SSD ~1TB] - [ASUS ROG PG278Q] - [Corsair AX1200i] - [Corsair Hydro Series H115i]

Trädvy Permalänk
Hedersmedlem
Plats
Linköping
Registrerad
Apr 2004
Skrivet av carbonprogrammer:

@Elgot:

Ja jag funderar med på det, men nu har jag bara gjort en liten del av programmet och jag kan inte tänka mig, med tanke på att allt annat finns så bra lösningar till, att man ska behöva sitta och göra en för varje.

Man borde som sagt kunna använda ett tredje tillstånd (med reservation för att jag inte vet om just NULL är lämpligt):

(@knowledgeElectric = NULL OR [knowledgeElectric] = @knowledgeElectric) AND (@knowledgeMount = NULL OR [knowledgeMount] = @knowledgeMount)

och sätta variablerna till NULL om man inte vill använda dem.

Trädvy Permalänk
Medlem
Plats
127.0.0.1
Registrerad
Jun 2016

@Elgot:

Men, då söker den efter endast NULL och ingenting kommer vara null, eller är jag helt ute och cyklar nu?

[ASUS X99-DELUXE] - [i7 5960X] - [48 GB Corsair Dominator Platinum] - [ASUS ROG 780TI] - [ Kingston HyperX Predator 480GB PCI-E ] - [ 12TB 4x3TB WD RED SERIES ] - [Some SSD ~1TB] - [ASUS ROG PG278Q] - [Corsair AX1200i] - [Corsair Hydro Series H115i]

Trädvy Permalänk
Hedersmedlem
Plats
Linköping
Registrerad
Apr 2004
Skrivet av carbonprogrammer:

@Elgot:

Men, då söker den efter endast NULL och ingenting kommer vara null, eller är jag helt ute och cyklar nu?

För att en post skall returneras måste alla parenteser vara sanna och det blir de om det man jämför med är NULL eller om fältet man testar mot lika med sökvärdet.