17. november 2011 - 01:02Der er
25 kommentarer og 1 løsning
Søge funktion i C# (OleDb)
Hej folkens,
Efter utallige timers søgning på nettet og forsøg med at sætte noget sammen, er jeg nødt til at kapitulere.
Jeg har et meget simpelt setup/GUI (bruger Visual C# 2010, WPF) med en textBox1, en button og et dataGrid1. Det jeg vil er at søge på et hvilket som helst ord i min access (2010) database, hvorefter den så udskriver hele rækken med alle informationerne til dataGrid. Hvis jeg f.eks. skriver kundenr eller firmanavn i textBoxen og trykker søg, skal alle informationer der står i samme række med det søgte ord i databasen, altså udskrives til dataGridet.
I min database er en tabel kaldet Info og en masse felter: Kundenr (Primær nøgle og autonummering - resten er tekst), Firmanavn, Adresse, By, Postnr, Land, Kontaktperson, Telefon, Mail.
Jeg kan få applikationen til at åbne op så jeg kan skrive noget i textBoxen, men når jeg så trykker søg giver den mig en fejl: Der er en syntaksfejl i FROM-delsætningen.
Koden jeg bruger lige pt. er følgende:
using System.Data; // ADO.Net namespace using System.Data.OleDb; // OleDb namespace
public partial class MainWindow : Window { public MainWindow() { InitializeComponent();
Application.Current.Properties["Main"] = this; // sætter dette vindue til navnet "Main" Application.Current.Properties["Vindue1"] = new Window1(); // sætter Window1 til navnet "Vindue1"
// Lav et connection-objekt, åbn forbindelsen og gem objektet som global variabel OleDbConnection cn = new OleDbConnection(); cn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Niclas\Desktop\Skole\Programmering\Database\KundeInfo.accdb;Persist Security Info=False;"; cn.Open(); Application.Current.Properties["DBConnection"] = cn;
Tak for jeres links. Nu har jeg siddet og prøvet at tilføje parameters og ændre rundt i koden og bruge forskellige metoder, men får stadig den samme fejl!!
Noget sample kode hjælp vil være meget belejligt, da jeg simpelthen sidder fast.
Tak. Kan value ikke være textBox1.Text? Meningen er jo den skal skrive det hele ud i dataGridet. Ved f.eks. at det kan lade sig gøre at skrive alt fra et "referencenr" i access ud i et dataGrid vha. noget DataRow og DataTable (desværre kan jeg kun få dette til at virke i Windows Forms?!). Så hvis jeg skriver f.eks. 1 i tekstboksen og trykker søg, så skriver den alt det info der står sammen med et-tallet, dvs. navn osv. :) Nu har jeg ændret select til dette men får stadig en NY fejl.
"SELECT * FROM Info Where Kundenr, Firmanavn, Adresse, By, Postnr, Land, Kontaktperson, Telefon, Mail LIKE '%" + textBox1.Text + "%'";
Når jeg bruger den får jeg en ny syntaksfejl. Har skrevet Niclas i textBox1 og trykket på søg-knappen.
Der er en syntaksfejl, fordi der mangler et komma. i forespørgselsudtrykket "Kundenr, Firmanavn, Adresse, By, Postnr, Land, Kontaktperson, Telefon, Mail LIKE '%Niclas%'".
Jeg smutter i seng, svarer imorgen (hvis I stadig er oppe, godnat).
Jeg er jo nybegynder til alt det her med programmering, så var egentlig for at få noget kode hjælp. :)
Jeg bruger vel ikke SQL da databasen ligger offline på min computer, det er til et projekt, så SQL injection (attacks) etc. er ikke noget der spiller nogen stor rolle. Generelt fatter jeg ikke at det skulle være så svært at lave? :O Skal jeg droppe dataGrid og bruge listBox istedet for, det virker meget mere simpelt..?
Kan du hjælpe med at lave den query rigtig så? Jeg prøver og prøver med forskellige ting og læser alt muligt, men forstår det sgu ikke rigtigt. En samplecode ville hjælpe rigtigt meget og gerne med lidt forklaring.
"SELECT * FROM Info Where Kundenr, Firmanavn, Adresse, By, Postnr, Land, Kontaktperson, Telefon, Mail LIKE '%" + textBox1.Text + "%'";
Eneste problem
SELCT columns FROM table WHERE column = value OR column = value OR column = value OR column = value OR column = value OR column = value
Eneste problem er jo at du skal OR dine conditions.
Jeg gider ikke laver det for alle de columns, det kan du selv. Men den skal jo bare se ca. sådan her ud: "SELECT * FROM Info WHERE Kontaktperson LIKE '%" + textBox1.Text + "%' OR Telefon LIKE '%" + textBox1.Text + "%'";
Så den skal se sådan her ud? Altså med Kundenr, Firmanavn, Adresse, By(har lavet det om til City da By vel er et reserveret navn?), Postnr, Land, Kontaktperson, Telefon, Mail?
"SELECT * FROM Info WHERE Kundenr LIKE '%" + textBox1.Text + "%' OR Firmanavn LIKE '%" + textBox1.Text + "%'" OR Adresse LIKE '%" + textBox1.Text + "%'" OR City LIKE '%" + textBox1.Text + "%'" OR Postnr LIKE '%" + textBox1.Text + "%'" OR Land LIKE '%" + textBox1.Text + "%'" OR Kontaktperson LIKE '%" + textBox1.Text + "%'" OR Telefon LIKE '%" + textBox1.Text + "%'" OR Mail LIKE '%" + textBox1.Text + "%'";
"SELECT * FROM Info WHERE Kundenr LIKE '%" + textBox1.Text + "%' OR Firmanavn LIKE '%" + textBox1.Text + "%' OR Adresse LIKE '%" + textBox1.Text + "%' OR City LIKE '%" + textBox1.Text + "%' OR Postnr LIKE '%" + textBox1.Text + "%' OR Land LIKE '%" + textBox1.Text + "%' OR Kontaktperson LIKE '%" + textBox1.Text + "%' OR Telefon LIKE '%" + textBox1.Text + "%' OR Mail LIKE '%" + textBox1.Text + "%'";
Mener faktisk at det er nemmere i WPF, men stadig ikke helt nemt. Tænkæ tænke, lang tid siden jeg har haft brug for det.
mvh
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.