none
SqlDataReader ergebniss mit einer Variable Vergleichen RRS feed

  • 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



    Donnerstag, 13. Oktober 2011 17:47

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

    Freitag, 14. Oktober 2011 10:06
    Beantworter
  • 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();
    
    


    Donnerstag, 13. Oktober 2011 18:22

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();
    
    


    Donnerstag, 13. Oktober 2011 18:22
  • 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

    Freitag, 14. Oktober 2011 10:06
    Beantworter