2016-04-29 2 views
1

Ich bin ein Intranet für mein Schulprojekt in einer Formularanwendung mit dem .NET-Framework und der C# -Sprache erstellen. Diese Funktion füllt ein Datenraster innerhalb eines Formulars. Der Code innerhalb der while-Struktur wird jedoch nicht ausgeführt. Ich bin Schritt für Schritt mit dem Debugger gegangen, und ich denke, dass die read() - Methode des "dr" -Objekts nicht durch meine zwei inneren verbundenen Tabellen gehen wird, aber wenn ich einen Knopf drücke, den ich gesetzt habe, um mir zu zeigen, wie viele Bücher Sind sie in der Datenbank registriert, funktioniert es. Ich denke, dass etwas mit meiner SQL-Anweisung falsch ist, mit dem, was ich auf dieser Site gesucht habe, aber ich habe es nicht geschafft, den Fehler zu beheben. Carti.Nota und Carti.Stoc sind Spalten mit dem Zahlentyp innerhalb einer Microsoft Access 2013-Datenbank.C# .NET: Lese-Methode der OleDbDataReader-Klasse wird nicht ausgeführt

private void PopulateGridBooks() 
    { 
     dataGridView1.Rows.Clear(); 
     using (OleDbConnection connect = new OleDbConnection(ConfigurationManager.ConnectionStrings["LibrarieConectare"].ConnectionString)) 
     { 
      OleDbCommand command = connect.CreateCommand(); 
      command.Parameters.AddWithValue("@titlu", cautaTitlu.Text); 
      command.CommandText = 
       " SELECT Carti.IDCarte, Carti.Titlu, Carti.Editie, Carti.An, Carti.ISBN, Carti.Nota, Carti.IDAutor, Carti.Stoc, Edituri.NumeEditura " + 
       " FROM (Carti INNER JOIN Edituri ON Carti.IDEditura = Edituri.IDEditura) " + 
       " WHERE Titlu LIKE '%@titlu%'"; 
      try 
      { 
       connect.Open(); 
       OleDbDataReader dr = command.ExecuteReader(); 
       if (dr.HasRows) 
       { 
        while (dr.Read()) 
        { 
         dataGridView1.Rows.Add(dr["IDCarte"], dr["Titlu"], dr["NumeEditura"], dr["Stoc"]); 
        } 
       } 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show("Eroare la populare data grid carti: " + ex.Message); 
      } 
     } 
    } 
+1

Fügen Sie den Code als Text, nicht als verknüpftes Bild. –

+0

was wird als Ausgabe? –

+1

Von einem schnellen Blick sind die() nicht um den Join erforderlich. Was passiert, wenn Sie während des Debugings den Abfragetext aus dem Befehlstext erhalten und in den Abfrageanalysator einfügen? Gibt es Ergebnisse zurück? Verschiebe auch dr.Read() über die while und setze es als Variable. z.B. var x = dr.Read() und überprüfen Sie dann den Wert von x im Debugger, um zu verstehen, wo es falsch läuft. Schließlich, erhalten Sie irgendetwas in der Ausnahme? –

Antwort

1

denken, dass ich es gefunden - Ihre Parameter falsch ist, Sie nicht ein @ im AddWithValue haben sollte.

Verwendung:

//Exclude the @ in the below. 
command.Parameters.AddWithValue("titlu", cautaTitlu.Text); 

vielleicht auch Ihre Parameter zusätzlich Zeile nach dem Befehl Text bewegen.

+0

Sie hatten Recht, es hat funktioniert. Vielen Dank! –

+0

Keine Sorge, markieren Sie es als die Antwort bitte. –

1

die Sie interessieren,

command.CommandText = 
       " SELECT Carti.IDCarte, Carti.Titlu, Carti.Editie, Carti.An, Carti.ISBN, Carti.Nota, Carti.IDAutor, Carti.Stoc, Edituri.NumeEditura " + 
       " FROM Carti INNER JOIN Edituri ON Carti.IDEditura = Edituri.IDEditura " + 
       " WHERE Titlu LIKE '%' + @titlu + '%'; 
+1

Es funktioniert aus irgendeinem Grund ohne das "@", aber auf einer anderen Version von Visual Studio, die mein Kumpel hat, funktioniert es auch mit dem "@". Wie auch immer, danke, dass du dir Zeit genommen hast, meine Anfrage zu überprüfen. –

0

Ich schlage vor, Änderung in where-Klausel wie die folgende: "WHERE Titlu LIKE '%' + @titlu + '%'"

Verwandte Themen