Avatar billede mema Nybegynder
07. december 2007 - 19:26 Der 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";
-------------
Avatar billede a1a1 Novice
07. december 2007 - 19:30 #1
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
Avatar billede a1a1 Novice
07. december 2007 - 19:32 #2
men, den søger vist ikke som du vil have det ;o)

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
Avatar billede a1a1 Novice
07. december 2007 - 19:33 #3
hov
SELECT ResultatID, Beskrivelse_spg, Oplysning_sendt FROM Resultat WHERE Beskrivelse_spg like '%bil%' OR Beskrivelse_spg like '%bmw%' ORDER BY ResultatID DESC
Avatar billede lifo Nybegynder
07. december 2007 - 22:55 #4
like er en mega tung funktion om der er mange poster i tabellen
så prøv heller at kigge på freetext search
1 million milliard gange hurtigere
Avatar billede mema Nybegynder
07. december 2007 - 23:07 #5
Hvordan så efter 19:30:48 skal jeg skrive i min codebehind? jeg har oprettet din sp og har kaldt den sp_Soeg.

Jeg har skrevet følgende, men det virker ikke:
------------

private DataTable GetData()
{
string containsPart = txtSoeg.Text;
containsPart = containsPart.Replace(" ", " OR ");
string strCmd;
SqlConnection conSoeg = new SqlConnection(WebConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString);

SqlCommand mySqlCommand = new SqlCommand("sp_Soeg", conSoeg);
mySqlCommand.CommandType = CommandType.StoredProcedure;
mySqlCommand.Parameters.Add("@containsPart");

SqlDataAdapter oCMD = new SqlDataAdapter(mySqlCommand, conSoeg);

DataSet oDS = new DataSet();
oCMD.Fill(oDS, "Resultat");
...
...
DataTable dt = oDS.Tables["Resultat"];
return dt;
}
----------------
Avatar billede a1a1 Novice
08. december 2007 - 21:23 #6
SqlCommand mySqlCommand = new SqlCommand("sp_Soeg", conSoeg);
?
jeg ved ikke om den er "OK" men, jeg bruger normalt noget ala (skriver vb normalt)

SqlCommand mySqlCommand = new SqlCommand("conSoeg);
mySqlCommand.CommandType = CommandType.StoredProcedure;
mySqlCommand.CommmanText = "sp_soeg";
mySqlCommand.Parameters.Add("@containsPart", containsPart);
Avatar billede a1a1 Novice
08. december 2007 - 21:25 #7
mySqlCommand.CommmanText = "sp_soeg";
skal være
mySqlCommand.CommandText = "sp_soeg";


lifo, tja måske i nogle tilfælde, men det har intet med spm. at gøre
Avatar billede mema Nybegynder
08. december 2007 - 23:15 #8
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...............
Avatar billede mema Nybegynder
15. april 2008 - 12:28 #9
lukker.
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