2012-04-05 2 views
0

Ich habe eine cicle für die Validierung, aber aus irgendeinem Grund geht es nicht trought die cicleÄrger mit cicle, ein Ergebnis, aber es nicht geht trought es

Schauen Sie sich die Kommentare, die während cicle es scheint, tut nichts

Wenn ther jedes Verfahren ist ein Ergebnis plase mich zurückzuholen sagen, wie mein Code zu tun, ist es

Hier würde jede Hilfe

private bool validar_ultimo_movimiento(Int64 cedula) 
    { 
     bool validar = false; 


     DateTime tipo = Convert.ToDateTime("00:00:00"); 
     SqlConnection Wdcon_usuario = new SqlConnection(WDcon); 
     SqlCommand usuario = new SqlCommand(); 
     SqlDataReader usuarioDR = null; 

     //Instancio la conexion SQL 
     usuario.Connection = Wdcon_usuario; 

     //Registro el Query SQL 
     usuario.CommandText = "SELECT TOP 1 * FROM movimiento_docente WHERE (ID = @cedula) ORDER BY id_movimiento DESC"; 
     usuario.Parameters.AddWithValue("@cedula", cedula); 

     //Abro la conexion 
     Wdcon_usuario.Open(); 

     //Ejecuto la consulta 
     usuarioDR = usuario.ExecuteReader(); 

     //Empiezo el ciclo 
     while (usuarioDR.Read()) 
     { 
      MessageBox.Show("Paso por aca 2"); // <- It does not execute 
      if (usuarioDR["fechahora"].ToString() != "") 
      { 
       MessageBox.Show("Paso por aca 3"); 
       tipo = (DateTime)usuarioDR["fechahora"]; 
       MessageBox.Show(tipo.ToString()); 
      } 
      else 
      { 
       validar = true; 
       MessageBox.Show("Paso por aca 1"); 
      } 
     } 

     //Cierro la conexion 
     Wdcon_usuario.Close(); 
     //Termino la sentencia SQL 

     DateTime valoringresado = Convert.ToDateTime(dtHoraManual.Value); 
     MessageBox.Show("Valor Ingresado = " + valoringresado.ToString() + " Valor BD = " + tipo.ToString()); 
     if (valoringresado > tipo) 
     { 
      validar = true; 
     } 
     else 
     { 
      validar = false; 
     } 
     return validar; 
    } 
+1

Ich stoße hier in eine Sprachbarriere. Wenn du mit cicle die while-Schleife meinst, wo kommt die Validierung her? Die while-Schleife liest alle Datensätze, die die Abfrage zurückgibt (eins nach dem anderen), ist das nicht, was passieren soll? –

+0

Wenn Sie nicht in die While-Schleife gelangen, bedeutet dies, dass die Abfrage 0 Ergebnisse zurückgegeben hat, könnte das sein? –

+0

Ja soll in der while-Schleife passieren, aber es funktioniert nicht, ich muss nur 1 Datensatz abrufen, aber aus irgendeinem Grund wird die while-Schleife nicht ausgeführt (usuarioDR.ExecuteReader() ist der Auslöser, um die Schleife arbeiten) – ricardorios

Antwort

1

Ihr Code erkannt werden, für Der Zugriff auf das SQLDataReader-Objekt sieht korrekt aus.

Wenn ich Sie richtig verstehe, diese while Schleife ist nicht laufen:

//Empiezo el ciclo 
    while (usuarioDR.Read()) 
    { 
     MessageBox.Show("Paso por aca 2"); // <- It does not execute 
     if (usuarioDR["fechahora"].ToString() != "") 
     { 
      MessageBox.Show("Paso por aca 3"); 
      tipo = (DateTime)usuarioDR["fechahora"]; 
      MessageBox.Show(tipo.ToString()); 
     } 
     else 
     { 
      validar = true; 
      MessageBox.Show("Paso por aca 1"); 
     } 
    } 

Wenn diese Schleife nicht laufen wird, ist es, weil die usuarioDR.Read() Funktion einen Wert von false zurückkehrt. Hier einige Dinge zu versuchen, herauszufinden, was schief läuft:

starten Debuggen von Code - ein guter erster Schritt einen Haltepunkt an while (usuarioDR.Read()) und sehen zu setzen wäre, welche Informationen in der usuarioDR Objekt enthalten ist an diesem Punkt in Ihrer Funktion . Gibt es irgendetwas im Objekt usuarioDR? Wenn nicht, bedeutet das, dass nichts in usarioDR geschoben wird, wenn Sie ExecuteReader() aufrufen.

Versuchen Sie, sich dem anderen Ende zu nähern - schreiben Sie Ihre "SELECT TOP 1 * FROM movimiento_docente WHERE (ID = @cedula) ORDER BY id_movimiento DESC" Abfrage im Server Management Studio mit einem Testwert für @cedula aus. Erzeugt es die erwarteten Ergebnisse? Wenn dies der Fall ist, bedeutet das, dass Ihr Problem in Ihrem Code liegt und wie er auf die Datenbank zugreift.

Am Ende denke ich, es geht um den Standard Debugging-Prozess: Stellen Sie Haltepunkte, Schritt durch Ihren Code und überprüfen Sie die Daten in Ihren Objekten, um zu sehen, ob es Ihren Erwartungen entspricht.

Ein Ort zum Starten der Suche könnte bei Ihrem usarioDR Objekt sein. Sie beginnen mit der Initialisierung als null; Ist es immer noch null nachdem Sie die Zeile usuarioDR = usuario.ExecuteReader(); ausgeführt haben? Wenn dies der Fall ist, können Sie Ihre Suche eingrenzen.

+0

Auf SQL Server Management Studio gibt es mir das Ergebnis, das ich erwarte, wie Sie sagen, die Schleife wird nicht ausgeführt, so dass ich nicht weiß, was hier passiert – ricardorios

+0

Ich habe bearbeitet meine Antwort, um noch mehr Lösungstipps zu geben. Was Sie tun müssen, ist ein aktives Debugging zu starten. Sie wissen, was Ihr Code tun soll, was bedeutet, dass Sie eine Idee im Kopf haben, was in jeder Zeile Ihrer Funktion passiert.Gehen Sie Schritt für Schritt durch Ihren Code und versuchen Sie zu überprüfen, ob jede Zeile des Codes (a) so funktioniert, wie Sie es für richtig halten, und (b) das von Ihnen erwartete Ergebnis liefert. Sie verwenden C#, daher nehme ich an, dass Sie Visual Studio verwenden. Richten Sie an einigen Zeilen in Ihrer Funktion Haltepunkte ein und verwenden Sie diese, um Ihren Code/Ihre Daten zu überprüfen. – lyrisey

+0

Ich habe alreadey auf meinem Code und SQL Server getestet, es scheint usuarioDR.Read() hat diesen Fehler "Empty \t" La enumeración keine produjo ningún resultado "\t Zeichenfolge" (Es bedeutet "Enumeration ergab keine Ergebnisse") – ricardorios