07. december 2007 - 19:26Der er
8 kommentarer og 1 løsning
Stored procedure
Jeg har en søgningsstring i codebehind, der søger efter ord i en sql-2005 database. Jeg vil gerne oprette en stored procedure, der kan bruges i denne sammenhæng.
Del af nuværende kode, hvor en stored procedure skal erstatte denne(txtSoeg er mit søgefelt i webformen): ------------ string containsPart = txtSoeg.Text; containsPart = containsPart.Replace(" ", " OR "); ...... ...... ...... strCmd = "SELECT ResultatID, Beskrivelse_spg, Oplysning_sendt FROM Resultat WHERE Beskrivelse_spg like '%" + containsPart + "%' ORDER BY ResultatID DESC"; -------------
create proc Search @containsPart AS VARCHAR(50) AS SELECT ResultatID, Beskrivelse_spg, Oplysning_sendt FROM Resultat WHERE Beskrivelse_spg like '%' + @containsPart + '%' ORDER BY ResultatID DESC
hvis man søger på f.eks: "bil bmw" vil sql'en komme til at se sådan ud: SELECT ResultatID, Beskrivelse_spg, Oplysning_sendt FROM Resultat WHERE Beskrivelse_spg like '%bil OR bmw%' ORDER BY ResultatID DESC
du vil vel have den: SELECT ResultatID, Beskrivelse_spg, Oplysning_sendt FROM Resultat WHERE Beskrivelse_spg like '%bil%' OR '%bmw%' ORDER BY ResultatID DESC
hov SELECT ResultatID, Beskrivelse_spg, Oplysning_sendt FROM Resultat WHERE Beskrivelse_spg like '%bil%' OR Beskrivelse_spg like '%bmw%' ORDER BY ResultatID DESC
Jeg har 3 radiobuttons, hvor man kan vælge mellem. Jo efter hvilke man vælger, skal der søges i forskellige felter af tabellen med forskellige stored procedures. Jeg har skrevet koden i hvert for den første radiobutton på følgende måde efter a1 (21:23:12): -------- private void BindGrid() { dg.DataSource = GetData(); dg.DataBind(); } private DataTable GetData() { string containsPart = txtSoeg.Text; containsPart = containsPart.Replace(" ", " OR "); SqlConnection conSoeg = new SqlConnection(WebConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString); SqlCommand mySqlCommand; if (radioSoeg.SelectedIndex == 0) { mySqlCommand = new SqlCommand("conSoeg"); mySqlCommand.CommandType = CommandType.StoredProcedure; mySqlCommand.CommandText = "sp_soeg"; mySqlCommand.Parameters.AddWithValue("@containsPart", containsPart); conSoeg.Open(); SqlDataAdapter oDA = new SqlDataAdapter("sp_soeg", conSoeg); DataSet oDS = new DataSet(); oDA.Fill(oDS, "Resultat"); conSoeg.Close(); int antal = oDS.Tables["Resultat"].Rows.Count; lblSoeg.Text = "Der er fundet " + "<b>" + antal.ToString() + "</b>" + " forekomst af " + "<b>" + txtSoeg.Text + "</b>"; DataTable dt = oDS.Tables["Resultat"]; return dt; } else if (radioSoeg.SelectedIndex == 1) { .... .... --------- Men jeg får følgende fejl i browseren efter klik på søg-knap:
System.Data.SqlClient.SqlException: Procedure or function sp_soeg' expects parameter '@containsPart', which was not supplied. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.SqlInternalConnection.OnError...............
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.