27. februar 2005 - 09:58
Der er
13 kommentarer og 1 løsning
hastighed i SqlServer
Hej Jeg har en side med 15 dropdown lister som hver især bliver fyldt op fra hver sin tabel i en SqlServer database. Det foregår sådan her: .... sqlStr = "Select lId, Name From Looks"; dReader = DB.Query(sqlStr, Conn); drpLooks.Items.Add("Vælg"); drpLooks.Items[drpLooks.Items.Count - 1].Value = "0"; while (dReader.Read()) { if (dReader.GetInt32(0) != 0) { drpLooks.Items.Add(dReader.GetString(1)); drpLooks.Items[drpLooks.Items.Count - 1].Value = dReader.GetInt32(0).ToString(); } } dReader.Close(); ........ Det her sker så 15 gange på siden, så er mit spørgsmål om ikke det kan gøres mere effektivt? Med et view eller stored procedure måske!? :o)
Annonceindlæg fra Barco
Er jeres mødelokaler sikre nok?
Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
27. februar 2005 - 10:17
#1
Du kunne godt lave en stored procedure som returnerede 15 result set. Men jeg tvivler på at du vil kunne mærke forskellen.
27. februar 2005 - 14:00
#2
Så efter din mening kan det ikke gøres frygtelig meget hurtigere end det jeg allerede gør?
27. februar 2005 - 14:35
#3
Jeg tror ikke at det vil være signifikant. Men der er kun en måde at finde ud af det på: prøv det.
27. februar 2005 - 14:46
#4
ok,. nu har jeg ikke den store erfaring med stored procedures, og slet ikke når den skal returnere flere result sets. Kan du give mig nogle ledetråde eller links ?
27. februar 2005 - 14:48
#5
Jeg kan godt lave et lille eksempel
27. februar 2005 - 14:49
#6
ville være helt kanon
27. februar 2005 - 15:00
#7
CREATE PROCEDURE getall AS SELECT * FROM t1 WHERE f1 % 2 = 0 SELECT * FROM t1 WHERE f1 % 2 = 1 GO
27. februar 2005 - 15:00
#8
using System; using System.Data; using System.Data.SqlClient; class MainClass { public static void Main(string[] args) { SqlConnection con = new SqlConnection("server=ARNEPC2;Integrated Security=SSPI;database=Test"); con.Open(); SqlCommand cmd = new SqlCommand("getall", con); cmd.CommandType = CommandType.StoredProcedure; SqlDataReader rdr = cmd.ExecuteReader(); Console.WriteLine("lige f1:"); while(rdr.Read()) { Console.WriteLine(rdr[0] + " " + rdr[1]); } rdr.NextResult(); Console.WriteLine("ulige f1:"); while(rdr.Read()) { Console.WriteLine(rdr[0] + " " + rdr[1]); } rdr.Close(); con.Close(); } }
27. februar 2005 - 15:00
#9
lige f1: 2 BB 12345678 ABC ulige f1: 1 A 3 CCC
27. februar 2005 - 15:01
#10
Eksemplet er naturligvis pinligt banalt. Men det skulle vise teknikken. Kernen i koden er: rdr.NextResult(); som skifter til næste result set.
27. februar 2005 - 16:41
#11
Det ser rimelig overskueligt ud,. det prøver jeg. I mellem tiden kunne du måske forklare hvad sådan en sqlstreng gør: SELECT * FROM t1 WHERE f1 % 2 = 0 Det har jeg ikke set før!
27. februar 2005 - 16:43
#12
Hvis f1 modulus 2 er 0 (= hvis f1 er et lige tal).
27. februar 2005 - 17:30
#13
Yes nu kan jeg huske det modulus fra skolen :o) Jeg bruger nu stored procedure til at fylde siden op, men du har ret jeg kan hverken mærke eller måle nogen forandring. Det tager ca samme antal ms med begge metoder. Du får tak for hjælpen og undervisningen. Smider du lige et svar? :o)
27. februar 2005 - 17:32
#14
kommer her
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.