Avatar billede mema Nybegynder
20. november 2007 - 12:43 Der er 7 kommentarer og
1 løsning

Søgetekst med mellemrum giver fejl

Jeg har en sql database og en søgeformular. Har allerede oprettet full-text katalog og full-text index for databasen.

Jeg kan bare søge efter enkelte ord uden mellemrum. Hvis jeg skriver 2 ord med mellemrum kommer der fejlmeddelelse. Hvordan kan jeg løse dette problem? Tak i forvejen for enhver hjælp.

Her er min kode:
----------------
.....
.....
protected void Page_Load(object sender, EventArgs e)
{
Response.CacheControl = "no-cache";
}
protected void btnSoeg_Click(object sender, EventArgs e)
{
int counter = 0;
SqlDataReader reader;
SqlConnection conSoeg = new SqlConnection(WebConfigurationManager.ConnectionStrings["myConnection"].ConnectionString);
try
{
SqlCommand mySqlCommand = conSoeg.CreateCommand();
mySqlCommand.CommandText = "SELECT ResultatID, Beskrivelse_spg, Oplysning_sendt FROM Resultat WHERE CONTAINS (Beskrivelse_spg, ' " + txtSoeg.Text + " ');";
conSoeg.Open();
reader = mySqlCommand.ExecuteReader();
while (reader.Read())
{
lblSoeg.Text += "ID: " + Convert.ToString(reader["ResultatID"]) + "<br>" +
"<b>" + "Spørgsmål:" + "</b>" + "<br>" +
"<i>" + "<font color=#666666>" + Convert.ToString(reader["Beskrivelse_spg"]) + "<br>" + "</font>" + "</i>" +
"<b>" + "Oplysning sendt:" + "</b>" + "<br>" +
Convert.ToString(reader["Oplysning_sendt"]) + "<br><br><br>";
counter++;
}
reader.Close();
conSoeg.Close();
}
catch (Exception ex)
{
lblFejl.Text = ex.ToString();
}
finally
{
lblCounter.Text = "Der er fundet " + "<b>" + counter.ToString() + "</b>" + " forekomst af " + "<b>" + txtSoeg.Text + "</b>";
}
}
....
....
Avatar billede anri Novice
20. november 2007 - 16:44 #1
Hvilken fejlmeddelelse kommer den med?
Avatar billede nielle Nybegynder
20. november 2007 - 18:47 #2
Måske sådan?

protected void btnSoeg_Click(object sender, EventArgs e)
{
    int counter = 0;
    SqlDataReader reader;
    SqlConnection conSoeg = new SqlConnection(WebConfigurationManager.ConnectionStrings["myConnection"].ConnectionString);

    try
    {
        SqlCommand mySqlCommand = conSoeg.CreateCommand();

        string containsPart = txtSoeg.Text;
        containsPart = containPart.Replace(" ", "' AND '");

        mySqlCommand.CommandText = "SELECT ResultatID, Beskrivelse_spg, Oplysning_sendt FROM Resultat WHERE CONTAINS (Beskrivelse_spg, '" + containsPart + "');";
        conSoeg.Open();

        reader = mySqlCommand.ExecuteReader();
        while (reader.Read())
        {
            lblSoeg.Text += "ID: " + Convert.ToString(reader["ResultatID"]) + "<br><b>
Spørgsmål:</b><br><i><font color=#666666>" + Convert.ToString(reader["Beskrivelse_spg"]) + "<br></font></i><b>Oplysning sendt:</b><br>" + Convert.ToString(reader["Oplysning_sendt"]) + "<br><br><br>";
            counter++;
        }
        reader.Close();

        conSoeg.Close();
    }
    catch (Exception ex)
    {
        lblFejl.Text = ex.ToString();
    }
    finally
    {
        lblCounter.Text = "Der er fundet <b>" + counter.ToString() + "</b> forekomst af <b>" + txtSoeg.Text + "</b>";
    }
}
Avatar billede mema Nybegynder
20. november 2007 - 23:07 #3
hej nielle,
Desværre får jeg stadigvæk denne fejl:

System.Data.SqlClient.SqlException: Incorrect syntax near the keyword 'AND'. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
....
....
Avatar billede mema Nybegynder
20. november 2007 - 23:23 #4
Hej igen nielle
Jo, det skulle står ... " AND " i stedet for "' AND '".

Nu virker det, men fremviser kun de forekomst, hvor alle ord findes.

Hvis jeg skriver OR i stedet for AND, så finder alle forekomster, hvor kun en af de skrevne ord kan findes, og dette kan blive en meget lang liste.

Kan man ikke begrænse visningen i ovenstående kode eller måske 'Paging'...?
Send venligst et svar.
Avatar billede nielle Nybegynder
21. november 2007 - 07:10 #5
Jeg ville ellers have sværget på at der skulle '-tegn rundt om teksterne, men åbenbart ikke...

Hvis du vil brgrænse antallet at udtræk så burde en "TOP 20" på SELECT'en vel kunne gøre det. Du kan også lave paging, men så skal du til at vise dine udtræk i en anden kontrol end en TextBox - f.eks. i et GridView.
Avatar billede Slettet bruger
21. november 2007 - 07:12 #6
altså du kan lave en LIMIT BY 10 fx .. eller benytte paging ja..

Bemærk i øvrigt også at du absolut ingen sikkerhed har i overstående løsning, og overvej om du ikke vil lave en parameter baseret løsning (eller benytte stored procedures) ..
Avatar billede Slettet bruger
21. november 2007 - 07:14 #7
ja se nielles eller LIMIT 0, 10 tror jeg det skulle have været..
Avatar billede nielle Nybegynder
21. november 2007 - 17:43 #8
Siden at det er til en MS SQL Server database er det "TOP ...". "LIMIT ..." er til MySQL og ville her i dette tilfælde give en SQL-fejl.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester