Benutzer mit den meisten Antworten
SqlDataReader ergebniss mit einer Variable Vergleichen

Frage
-
Hallo zusammen,
ich hab leider ein Problem und komm selber nicht drauf.
Ich wollte gerne aus meinem SqlDataReader Object(TsqlWertDataReader) das ergebniss aus einer SELECT abfragen mit einer Variable( der "sName") vergleichen. Die SQL Abfrage liefert nur einen Wert zurück. Das SqlDataReader Object wird auch befühlt aber ich komm da irgendwie nicht dran um es zu vergleichen.
Ist mein weg vielleicht total Falsch oder was muss ich tun?
Schon mal vielen Dank für die Hilfe.Hier der Code:
// zu Info was sName ist string sName = "Test"; _TSqlCommand.CommandText = _TSqlCommandStringBuilder.ToString(); SqlDataReader _TsqlWertDataReader = _TSqlCommand.ExecuteReader(); //Hier sollte der Wert der Abfrage mit einer Variablen Verglichen werden ! if (_TsqlWertDataReader.GetString(0) == sName) { _TsqlsNameExists = true; } _TSqlConnection.Close(); return _TsqlsNameExists;
M.f.G.Fugu3102
- Bearbeitet Fugu05 Donnerstag, 13. Oktober 2011 17:52
- Bearbeitet Robert BreitenhoferModerator Donnerstag, 3. November 2011 12:18 Formatierung
Antworten
-
Hallo,
effizienter ist es in solchen Fällen den Server den Wert suchen zu lassen,
der kann dann auch einen vorhanden Index nutzen.Das einfachste SQL wäre dabei
SELECT COUNT(*) FROM Tabelle WHERE Spalte = @GesuchterName
was Dir die Anzahl (0...n) liefern würde.
Effizienter bei größeren Tabellen ist aber eine Abfrage mittels EXISTS, als Beispiel für die Northwind.Customers:
DECLARE @CustomerID nchar(5) = N'ALFKI' SELECT CASE WHEN EXISTS(SELECT * FROM dbo.Customers WHERE CustomerID = @CustomerID) THEN CAST(1 AS bit) ELSE CAST(0 AS bit) END AS KundeVorhanden
in beiden Fällen würden dabei Parameter verwendet, so dass die Abfrage wiederverwendbar ist.
Und die Abfrage kann dann mit ExecuteScalar ausgeführt werden,
siehe Abrufen eines einzelnen Werts aus einer Datenbank (ADO.NET)Gruß Elmar
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 3. November 2011 12:18
-
Hab die Löschung selber gefunden ;-)
Hier meine Löschung:
Ich musste von meiner Reader auch lesen lassen.
Hier der Lösungs Code:
while(_TsqlWertDataReader.Read()) { if (_TsqlWertDataReader.GetString(0) == sName) { _TsqlsNameExists = true; } } _TSqlConnection.Close();
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 3. November 2011 12:18
Alle Antworten
-
Hab die Löschung selber gefunden ;-)
Hier meine Löschung:
Ich musste von meiner Reader auch lesen lassen.
Hier der Lösungs Code:
while(_TsqlWertDataReader.Read()) { if (_TsqlWertDataReader.GetString(0) == sName) { _TsqlsNameExists = true; } } _TSqlConnection.Close();
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 3. November 2011 12:18
-
Hallo,
effizienter ist es in solchen Fällen den Server den Wert suchen zu lassen,
der kann dann auch einen vorhanden Index nutzen.Das einfachste SQL wäre dabei
SELECT COUNT(*) FROM Tabelle WHERE Spalte = @GesuchterName
was Dir die Anzahl (0...n) liefern würde.
Effizienter bei größeren Tabellen ist aber eine Abfrage mittels EXISTS, als Beispiel für die Northwind.Customers:
DECLARE @CustomerID nchar(5) = N'ALFKI' SELECT CASE WHEN EXISTS(SELECT * FROM dbo.Customers WHERE CustomerID = @CustomerID) THEN CAST(1 AS bit) ELSE CAST(0 AS bit) END AS KundeVorhanden
in beiden Fällen würden dabei Parameter verwendet, so dass die Abfrage wiederverwendbar ist.
Und die Abfrage kann dann mit ExecuteScalar ausgeführt werden,
siehe Abrufen eines einzelnen Werts aus einer Datenbank (ADO.NET)Gruß Elmar
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 3. November 2011 12:18