2012-01-04 15 views
5

Ho una tabella con primarykey in MS SQL 2005, che ha alcune centinaia di migliaia di record. Quando lo interrogo in Management Studio per un record, questo mi porta molto rapidamente ma quando uso il codice qui sotto per trovarlo, ci vogliono molti secondi. Per me è necessario utilizzare il set di dati in quanto ho bisogno di aggiornare la riga. Come posso migliorare le prestazioni?SqlDataAdapter.Fill è troppo lento anche per un record

objData . ProcName ="myProcName" 
objData . CreateCommand() 
objData . Parameters("@BName", SqlDbType. VarChar, 20, "MyBranch1") 
SqlDataAdapter da = objData . createAdapter() 
da . Fill(ds,"MyTable1") 

Mentre il codice proc è molto semplice:

select * from MyTable1 Where BranchName = @BName 

questo insieme di dati è gonna sono 5 tavoli aperti allo stesso modo così totale il tempo è più di un minuto

+1

Datareader è la strada da percorrere: http://msdn.microsoft.com/en-us/library/haa3afyz%28v=VS.100%29.aspx – broke

+0

Ecco il codice di esempio – Adeem

risposta

2

Si dovrebbe considerare l'utilizzo di datareader invece di set di dati e fare un aggiornamento manuale usando sqlcommand.

U dovrebbe anche considerare limitare il numero di record che si sta recupero da possibilmente fornendo ulteriori criteri

+0

Quindi stai dicendo che non è possibile avere prestazioni migliori con il set di dati? E sto usando un numero sufficiente di criteri in quanto ognuno dei 5 datatabets nel set di dati non contiene più di 5 righe – Adeem

+0

quando si usa datareader, si sposta un record alla volta mentre incaso di dataadapter e dataset, adattatore recupera solo tutti i record e crea oggetti datarow per questo (e anche i vincoli e le relazioni, a seconda che il set di dati digitato o meno) questa creazione di oggetti richiede più tempo che è direttamente proporzionale al numero di record che hai. È un'applicazione webapp o windows? Potrei essere in grado di dirti l'approccio esatto da prendere a seconda di cosa stai lavorando su –

+0

Questa è la webapp e volevo migliorare le prestazioni senza modificare gran parte del codice. Ma se non è possibile, allora sicuramente lo cambierò in un lettore di dati. Hai ragione sull'oggetto DataRow e così via. Possiamo impostare qualche attributo o qualcosa per ignorare i vincoli e le relazioni nel set di dati? – Adeem

1

ho visto un comportamento ritardo molto simile utilizzando uno SQLDataAdapter, che ha avuto molti secondi per restituire una risposta, contro l'esecuzione la stessa identica procedura in SQL Server Mgmt Studio (sullo stesso computer client), che ha restituito una risposta istantaneamente.

Ho ricostruito gli indici sulle tabelle interessate e la risposta da SQLDataAdapter è stata quindi istantanea.

Non ho mai visto questo comportamento di ritardo con un SQLDataReader. Io uso spesso SQLDataReader e faccio semplicemente un MyTable.Load (MySQLDataReader). Sembra avere meno overhead di SQLDataAdapter.

Problemi correlati