webForumDet fria alternativet

Nästlad datareader?

.NET

5 svar · 511 visningar · startad av inspiro

Medlem sedan sep. 2005673 inlägg
Frågan#1

Går det att ha en nästlad datareader? Jag får inte till det:

SqlDataReader myReader1 = myCommand1.ExecuteReader();
  while(myReader.Read()) {
    SqlDataReader myReader2 = myCommand2.ExecuteReader();
      while (myReader2.Read()) {
         .......
      }     
   }
}

Jag får felet att "There is already an open DataReader associated with this Command which must be closed first."

Medlem sedan aug. 20003 575 inlägg
#2

1. Jag ser inte det nu men jag tror inte att man kan läsa från samma databaskoppling samtidigt.

2. Du borde kunna läsa det med att ändra dina SQL Queries lite så att du inte behöver använda två stycken.

Medlem sedan sep. 2005673 inlägg
#3

Tack, så var det! Anledningen till den här lösningen är mina begränsade sql-kunskaper tyvärr... det skulle bli en så himla komplex sql annars som jag inte får till.

Hur stora prestandaförluster gör man med 2 separerade sql-connections istället för en egentligen?

Medlem sedan maj 20012 812 inlägg
#4

inspiro skrev:

Hur stora prestandaförluster gör man med 2 separerade sql-connections istället för en egentligen?

Det beror på hur din övriga kod ser ut samt hur många besökare som du har. Det betyder att om du är ensam besökare så är det ingen skillnad, är det många besökare så tar det lite mer prestanda, men knappast något som du kommer märka av, tror nog att du skulle få bättre prestana med bättre SQL-kunskaper, eftersom det brukar vara dåligt skriva SQL satser som tar tid, inte skapa en koppling till databasen.

- M

Medlem sedan sep. 2005673 inlägg
#5

Så det är med andra ord OK att "slösa" lite på själva uppkopplingarna mot databasen, om jag får uttrycka mig så? Eller kan de ta slut? Har för mig att jag läst någonstans om "poolingproblem" eller vad det heter, att det blir fel för att det blir för många kopplingar mot databasen samtidigt? Hur många samtidiga kopplingar kan man ha? Jag använder sql server express.

Medlem sedan jan. 200475 inlägg
#6

Gör annars en querie med två olika select statements för de olika tabellerna du behöver få ut.
Sen kan du använda dig av DataReader.NextResult() för att komma åt andra tabellen när du är klar med den första. På så sätt används bara en databaskoppling och en DataReader men du får ut båda tabellerna sekvensiellt.

291 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
130 ms — deklarationer (db)
0 ms — hämta statistik (cache)
157 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)