vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2021
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

ADO.NET / Datenbanken
ADO.net: DB-Abfrage mit Parameter sehr langsam, ohne Parameter sehr schnell 
Autor: mkolb
Datum: 28.11.16 20:51

Hallo,
ich lese aus einer Datenbank (SQL-Server) aus. Wenn ich die Abfrage mit einem Parameter versehe,
dann dauert diese rund 10-15 Sekunden. Das dürfte daran liegen, daß die Datenbank schon megawuchtig ist, mit Millionen Datensätzen.
Nun habe ich festgestellt, wenn ich die Abfrage direkt am SQL Management-Studio durchführe, dort aber Werte direkt eingebe, ist das rasend schnell, quasi 0 Sekunden.

SQL = "Select * from [AKTIEN] WHERE NR=@Suchtext "
dim cmd as SqlCommand = new SqlCommand()
cmd.Connection = con
cmd.CommandText = SQL
cmd.Parameters.AddWithValue("@Suchtext", ID)
dim reader as SqlDataReader = cmd.ExecuteReader()  ' <- hier dauert es ca. 
' 10-15 Sekunden
while reader.Read()
... Werte auslesen
end while
Nun habe ich das im Code ebenfalls umgesetzt und voila, meine Anwendung rast nur so.

SQL = "Select * from [AKTIEN] WHERE NR="+ID.toString()+" "
anpasse, sowie die Zeile
cmd.Parameters.AddWithValue("@Suchtext", ID)
entferne, dann rast die Abfrage.

Ich möchte aber lieber Parameter verwenden, wegen SQL-Injection, etc.

Was muß ich tun, damit meine Abfrage per Parameter ebenfalls rast ?

Tschau
Martin

mein aktuelles .net-Projekt:
http://www.fiman.de
freue mich über Test-Informationen.

Screenshots gibt es hier: http://www.fiman.de

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: ADO.net: DB-Abfrage mit Parameter sehr langsam, ohne Parameter sehr schnell 
Autor: Manfred X
Datum: 29.11.16 11:21

Hallo!

Nutze ein Dataset als Ziel beim Laden der Daten in den Hauptspeicher.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: ADO.net: DB-Abfrage mit Parameter sehr langsam, ohne Parameter sehr schnell 
Autor: mkolb
Datum: 29.11.16 12:48

Hallo Manfred,
es ist egal, ob man das per DataReader oder Dataset ausließt.
Werden Parameter per .AddWithValue() übergeben, dauert es lange.

Habe aber festgestellt, wenn ich beim Parameter den Datentyp angebe, daß es schneller ist.
Muß das aber noch genauer analysieren.

Die Fehlerursache ist
cmd.Parameters.AddWithValue("@Suchtext", ID)
Man muß es durch
dim parameter as SqlDBParameter=new SqlDBParameter()
parameter.parameterName = "@Suchtext"
parameter.value = ID
parameter.SqlDbType = SqlDbType.Int
cmd.Parameters.Add(parameter)
ersetzen.

Bei kleinen Datenbanken mit kleinen Mengen scheinen beide Varianten ok zu sein.
Meine Datenbank hat bereits Millionen Datensätze über die Jahre angesammelt. Mir ist aufgefallen, daß die Abfrage langsamer und langsamer wird.

Das scheint schnell zu sein. Muß das aber noch durchtesten, aber die ersten Ergebnisse sind bei mir schon euphorisch.

Evtl. ersetze ich das .AddWithValue() auch bei den Add + Change-Funktionen.

Hat jemand anderes auch noch so ein Verhalten festgestellt ?

Tschau
Martin

mein aktuelles .net-Projekt:
http://www.fiman.de
freue mich über Test-Informationen.

Screenshots gibt es hier: http://www.fiman.de

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: ADO.net: DB-Abfrage mit Parameter sehr langsam, ohne Parameter sehr schnell 
Autor: Manfred X
Datum: 29.11.16 14:57

Probiere mal diese Tipps:
https://msdn.microsoft.com/de-de/library/ms177500.aspx
insbesondere
https://msdn.microsoft.com/de-de/library/ms173804.aspx

Beitrag wurde zuletzt am 29.11.16 um 15:00:21 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2021 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel