2016-03-31 5 views
0

VB.NETとSQL Server 2014.このコードは奇妙なエラーを生成します。 HasRowsはTRUEですが、選択範囲は空です。さらに、where条件を満たすレコードがテーブルに多数あるため、選択範囲は空であってはいけません。SqlDataReaderとselectが正しく動作しません

SQL Serverで同じものを直接選択すると、すべて正常に動作します。 annoとnomedivのパラメータは正しいです。

try 
    connection1.Open() 
    sqlcmd = String.Format("select distinct HomeTeam from tutto WHERE anno='{0}' AND div= '{1}' AND HomeTeam <> 'NULL'", annocampionato, nomediv(i)) 

    SetSqlCommand(sqlcmd, 1) 
    sqlreader1 = sqlcommand1.ExecuteReader() 

    Do While sqlreader1.Read() 
     If sqlreader1.HasRows Then ' 
       nomesquadra = RTrim(sqlreader1.GetString(0)) 
       ...... 
     End If 
    Loop 

    connection1.Close() 

    Catch ex As Exception 
    MsgBox(ex.Message) 
    connection1.Close() 
End Try 

は、より良い説明しよう:範囲の例外のうちのプログラムはWHILEループに入り、sqlreader1.hasrowsはTRUEですが、sqlreader1.GetString(0)リターン指数。コマンドをSELECT * FROM tuttoに変更すると、結果は同じになります。事前に

おかげ

パメラ

P.S.私は、リリース版の文字列concatを使用することを避けるよ

+0

**すべての**コードを投稿してください。 – Dai

+4

Whileループ内に "If sqlreader1.HasRows Then"を指定するのは意味がありません。結果が出ていない限りwhileループは入力されません。 – GendoIkari

+2

また、パラメータ化されたクエリを使用し、文字列のconcartentationまたは文字列のフォーマットを使用しないでください。 – Dai

答えて

0

私はあなたの論理は逆だと思います。確かに、ドキュメントは細いです。

あなたは1行を取得する場合は、次のようになります。

んがsqlreader1.Read()

trueを返し、データを読み込みます。

データがない場合sqlreader1.HasRows次に「

はfalseを返しますので。

ループ内のHasRowsをチェックするのは意味がありません。実際、それはまったくチェックしても意味がありません.Read()メソッドをループするだけです。

関連する問題