2016-04-29 8 views
1

私は、.NETフレームワークとC#言語を使用してフォームアプリケーション内で自分の学校プロジェクトのイントラネットを構築しています。この関数は、フォーム内のデータグリッドにデータを設定します。ただし、while構造体内のコードは実行されません。私はデバッガで一歩一歩を踏み出しました。私は、 "dr"オブジェクトのread()メソッドが2つの内部結合テーブルを通らないと考えていますが、ボタンを押すと、データベースに登録されていれば動作します。私はこのサイトで検索したことで、私のSQLステートメントに何か問題があると思いますが、バグを解決することはできませんでした。 Carti.NotaおよびCarti.Stocは、Microsoft Access 2013データベース内のNumber型の列です。C#.NET:OleDbDataReaderクラスの読み取りメソッドが実行されない

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

は、テキストとしてのコードを追加しますリンクされた画像としてではありません。 –

+0

出力として何が得られますか? –

+1

クイックルックでは、()は結合の周りでは必要ありません。デバッグ中にコマンドテキストからクエリテキストを取得し、それをクエリアナライザに貼り付けるとどうなりますか?結果を返しますか?また、dr.Read()をwhileの上に移動し、変数として設定します。例えばvar x = dr.Read()そしてデバッガのxの値を検査して、どこが間違っているのかを理解してください。最後に、あなたは例外で何かを得ていますか? –

答えて

1

は、私はそれを見つけたと思う - あなたのパラメータが間違っている、あなたはAddwithValueで、@を持つべきではありません。

用途:

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

多分あまりにコマンドテキストの後に自分のパラメータ添加ラインを移動します。

+0

あなたは正しい、それは働いた。本当にありがとう! –

+0

心配しないで、答えとしてマークしてください。 –

1

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

それは何らかの理由で "@"なしで動作しますが、私の仲間が持っている他のバージョンのVisual Studioでも "@"と一緒に動作します。とにかく、私のクエリを見直す時間を取ってくれてありがとう。 –

0

私は次のようにWHERE句の変更を提案、これを試してみてください。 "Titlu LIKE '%' + @titlu + '%'"

関連する問題