Avatar billede aslan Nybegynder
02. november 2003 - 15:29 Der er 8 kommentarer og
2 løsninger

Skal hente forskellige rækker fra ms sql

Jeg har denne procedure i db:

CREATE Procedure hentEnkeltVare
(
    @varenr int
)

AS

SELECT
    v.navn,
    v.enhed,
    vt.navn as type,
    v.pris,
    v.billedNavn

FROM
    vare as v,varetype as vt

WHERE
    v.type=vt.typenr and varenr=@varenr
GO



Og jeg kan hente den via metoden:


        public static SqlDataReader hentEnkeltVare(int vareNr)
        {
            SqlConnection sqlConnection = Util.Connect();
            SqlCommand sqlCommand = new SqlCommand("hentEnkeltVare",sqlConnection);

            sqlCommand.CommandType = CommandType.StoredProcedure;

            SqlParameter parameter = new SqlParameter("@varenr", SqlDbType.Int, 4);
            parameter.Value = vareNr;
            sqlCommand.Parameters.Add(parameter);

            sqlConnection.Open();
            SqlDataReader result = sqlCommand.ExecuteReader(CommandBehavior.CloseConnection);

            return result;

        }


Problemet er nu at jeg skal hente flere varer fra db på en gang, hvordan gør jeg lige det? Dvs hvis jeg f,eks vil hente vareNr 1,3,6,8,9 fra db på engang og returnere en SqlReader?
Avatar billede arne_v Ekspert
02. november 2003 - 17:43 #1
Jeg ville droppe stored procedure og lave en almindelig select
med:

SELECT
    v.navn,
    v.enhed,
    vt.navn as type,
    v.pris,
    v.billedNavn
FROM
    vare as v,varetype as vt

WHERE
    v.type=vt.typenr and varenr IN (1,3,6,8,9);

Den sidste laves ved at opbygge en SQL string dynamisk.
Avatar billede aslan Nybegynder
02. november 2003 - 20:18 #2
Det er en skole opgave arne og jeg skal bruge stored procedure. Desuden er den sql sætning heller ikke dynamisk, du skal tænke på at de forskellige varenumre skifter hele tiden...
Avatar billede arne_v Ekspert
02. november 2003 - 20:26 #3
Du kan opbygge den dynamisk med

string sql = "SELECT ... IN (";
for(int i = 0; i < n; i++) {
  if(i > 0) sql += ",";
  sql += a[i];
}
sql += ");";
Avatar billede arne_v Ekspert
02. november 2003 - 20:28 #4
Men det skal altså være en SP.

Hm.

Så vidt jeg har SP's altid et fast antal argumenter af simpel
type.

Men det er muligt at jeg tager fejl.

Men ihvertfald synes jeg ikke at en SP passer til problemet.
Avatar billede aslan Nybegynder
02. november 2003 - 20:43 #5
Din sql ville nok virke hvis det ikke var fordi jeg kørte Sp, men det kan en database altså ikke klare som en SP.
Avatar billede arne_v Ekspert
02. november 2003 - 20:46 #6
Du kan lave en SP med 10 eller 20 argumenter som har default NULL og så
kan din SP lave SELECT udfra hvormange der er NULL.

Men det er da så grim en løsning som jeg ved ikke hvad.

Formentlig bedre bare at kalde den SP flere gange.
Avatar billede arne_v Ekspert
02. november 2003 - 20:47 #7
altså din eksisterende
Avatar billede masc Nybegynder
03. november 2003 - 16:03 #8
hvorfor sender du ikke bare dine værdier til din SP som en kommasepereret tekst streng. Det vil løse dit problem.
Avatar billede arne_v Ekspert
16. november 2003 - 22:18 #9
Lukke tid ?
Avatar billede aslan Nybegynder
11. december 2003 - 11:57 #10
.
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
Computerworld tilbyder specialiserede kurser i database-management

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