| |
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 |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats März 2024 Dieter OtterUTF-8 Konvertierung von Dateien und StringsVB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. Neu! sevCommand 4.0
Professionelle Schaltflächen im modernen Design!
Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Weitere 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
|
|