| |
ADO.NET / DatenbankenADO.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 | |
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. | |
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 | |
| 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 |
|
|
sevAniGif (VB/VBA)
Anzeigen von animierten GIF-Dateien
Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|
|
|
Copyright ©2000-2024 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
|
|