Avatar billede bongo20 Nybegynder
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)
Avatar billede arne_v Ekspert
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.
Avatar billede bongo20 Nybegynder
27. februar 2005 - 14:00 #2
Så efter din mening kan det ikke gøres frygtelig meget hurtigere end det jeg allerede gør?
Avatar billede arne_v Ekspert
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.
Avatar billede bongo20 Nybegynder
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 ?
Avatar billede arne_v Ekspert
27. februar 2005 - 14:48 #5
Jeg kan godt lave et lille eksempel
Avatar billede bongo20 Nybegynder
27. februar 2005 - 14:49 #6
ville være helt kanon
Avatar billede arne_v Ekspert
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
Avatar billede arne_v Ekspert
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();
    }
}
Avatar billede arne_v Ekspert
27. februar 2005 - 15:00 #9
lige f1:
2 BB
12345678 ABC
ulige f1:
1 A
3 CCC
Avatar billede arne_v Ekspert
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.
Avatar billede bongo20 Nybegynder
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!
Avatar billede arne_v Ekspert
27. februar 2005 - 16:43 #12
Hvis f1 modulus 2 er 0 (= hvis f1 er et lige tal).
Avatar billede bongo20 Nybegynder
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)
Avatar billede arne_v Ekspert
27. februar 2005 - 17:32 #14
kommer her
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