2016-08-10 3 views
2

データベースが大きすぎるため、最初の数行を返すだけですが、SQLをテストしていたときにはselect *を返し、最初の行のみが返されました。SqlCommandは1行だけを返します

SqlCommand sqlCmd = new SqlCommand(); 
SqlDataReader reader; 

sqlCmd.CommandText = "SELECT * FROM Log"; 
sqlCmd.CommandType = CommandType.Text; 
sqlCmd.Connection = myConnection; 

myConnection.Open(); 

reader = sqlCmd.ExecuteReader(); 

Log logs = null; 

while (reader.Read()) 
{ 
    logs = new Log(); 
    logs.Id = Convert.ToInt32(reader.GetValue(0)); 
} 

return logs; 
myConnection.Close(); 

解決策は何ですか。

+1

reader.GetValue(0)は常に0番目のレコードを返します。必要? – mmcrae

+0

位置0の値の列名は何ですか?また、デバッガを使用して、レコードのカウント数を確認します。ログには 'Add'メソッドがありますか? – MethodMan

+4

ループの繰り返しごとに 'logs'を置き換えます。あなたはおそらく 'List 'またはそのようなものへの追加を見ているでしょう。あなたが持っているので、あなたは確かに1つのレコードを得ることができます。 –

答えて

9

ループでは、変数logsのインスタンスが常に再作成され、前のものを上書きしてクエリによって返された最後のレコードの値で終了します。あなたはグリッドのデータソースとしてこのリストを使用するか、またはちょうどあなたの将来の参照のためにそれを維持することができます

List<Log> logs = new List<Log>(); 
    while (reader.Read()) 
    { 
     Log current = new Log(); 
     logs.Id = Convert.ToInt32(reader.GetValue(0)); 
     logs.Add(current); 
    } 

List<Log> ...

foreach(Log log in logs) 
     MessageBox.Show(log.Id); 
+0

本当に素敵な:) – Werdna

関連する問題