2016-07-01 1 views
1
using (var conn = new SqlConnection(connectionString)) 
{ 
    var cmd = new SqlCommand("SELECT * FROM mySchema.MyTable", conn); 
    conn.Open(); 
    var reader = cmd.ExecuteReader(); 
    while(reader.Read()) 
    {... 

を返し、私は私の読者が1行を持って見ることができます - 私は、データが返さ見ることができます - しかし、reader.Readはので、私の処理コードが呼び出さ取得されていないfalseを返しています。DBReader行を持っていますが、読むには()デバッガでは偽

これはかなり基本的な "データベーステーブルから行を読み込む"ようですので、何が欠けていますか?読者の行データを直接または何かを見ているべきですか?

+0

この行はデバッガでどのくらい正確に表示されますか?あなたはどちらのプロパティを見てきましたか?デバッガはすでに 'Read()'を呼び出していたので、コードがそれを呼び出すときに 'false'となるようにしましたか? –

+1

デバッガのようなサウンドはすでにすべてのデータを読み込んでおり、コードはそれ以上データが存在しないことを検出しています。デバッガを使用しない場合、これは機能しますか? – hvd

+0

_真実に、デバッガはこのようにコードの動作を変更できますか? "reader"に "Results view"を展開した場合と同様に、while(reader.Read()){...}ループが実行されますか? –

答えて

3

デバッガに結果を表示させると、リーダーが読み込まれ、結果が列挙されます。

デバッガウィンドウ内のコメントを参照してください:

結果表示:IEnumerableを

を列挙します結果ビューを展開するには、だからあなたのデバッガは、すでにすべての結果を読み出して、あなたがそこにreader.Read()にステップた場合読み取る行がなくなり、Read()falseを返します。


litteテストで再生しました。私のデバッガが結果を読み込むと、私のコードはもうそれらを読むことができません。デバッガにそれらを表示させないと、私のコードがそれらを読むことができます。 (qed)

+0

これは問題だと思われますが、デバッガがプログラムの動作を壊すことは私にはまだ狂っています...返された結果を確認するか、どちらも!この問題を避けるために愚かな方法はありませんか? –

+0

@Boyはこの特別なケースではそうは思わない。一方、あなたはなぜ必要なのでしょうか?デバッグするには 'Read()'ループ内にブレークポイントを設定するだけです。私は 'SqlDataReader'が正しく動作することを確かめることができると思いますので、自分の読み取りループの前/外に結果を表示する必要はありません。 –

-3

varSqlDataReader reader = command.ExecuteReader();に変更して試してみてください。これで動作します。

私はあなたがリーダーをテストするSELECT 1;を試すことができますMYSQL

using (MYSQLCON) 
     { 
      using (MySqlDataReader sdr = sqlcmd.ExecuteReader()) 
      using (YourWriter) 
      { 
       String Header = null; 
       String Content = null; 

       for (int i = 0; i <= sdr.FieldCount - 1; i++) 
       { 
        Header = Header + sdr.GetName(i).ToString() + ","; 
       } 
       YourWriter.WriteLine(Header); 
       while (sdr.Read()) 

        for (int i = 0; i <= sdr.FieldCount - 1; i++) 
        { 
         Content = Content + sdr[i].ToString() + ","; 
         if (i == sdr.FieldCount - 1) 
         { 
          YourWriter.WriteLine(Content); 
          Content = null; 
         } 
        } 
      } 
     } 
+0

'var'は構文sugerです。コンパイラは、それが 'SqlDataReader'上で動作していることを知っています。これはOPによって観察される行動とは関係がありません。 –

+0

@RenéVogt、この 'reader.HasRows'プロパティを試してください –

-1

のためのサンプル・コードを持っています。 SqlManagement Studioをお持ちですか?クエリをテストする。

作品です。

using (var conn = new SqlConnection(connectionString)) 
     { 
      var cmd = new SqlCommand("select 1", conn); 
      conn.Open(); 
      var reader = cmd.ExecuteReader(); 
      while(reader.Read()) 
      { 
       string a = "teste"; 
      } 
     } 
関連する問題