2013-04-01 4 views
10

テーブルからすべてのデータを読み込み(3行を含む)、すべてのデータを汎用コレクションに追加したいと思っていました。コレクションから、wanaはgridviewにバインドします。SQL DataBaseテーブルから汎用コレクションへの読み取り

あなたはme.Am beginer

protected void Page_Load(object sender, EventArgs e) 
{ 
    List<Student> listid = new List<Student>(); 
    Student stud = new Student(); 
    SqlConnection con = new SqlConnection("........"); 
    string sql = "select * from StudentInfo"; 
    con.Open(); 
    SqlCommand cmd = new SqlCommand(sql, con); 
    SqlDataReader dr = cmd.ExecuteReader(); 
    while (dr.Read()) 
    { 
     stud.Studid = Convert.ToInt32(dr["StudId"]); 
     stud.StudName = dr["StudName"].ToString(); 
     stud.StudentDept = dr["StudentDept"].ToString(); 
     listid.Add(stud);    
    } 
    GridView1.DataSource = listid; 
    GridView1.DataBind(); 
} 
public class Student 
{ 
    private int studid; 
    public int Studid 
    { 
     get { return studid; } 
     set { studid = value; } 
    }  
    private string studName; 
    public string StudName 
    { 
     get { return studName; } 
     set { studName = value; } 
    } 
    private string studentDept; 
    public string StudentDept 
    { 
     get { return studentDept; } 
     set { studentDept = value; } 
    } 

は、出力は次のようにある役立つコード作品の下に表示されますが、最後の行のみがgridview.Canで3回表示されます。

enter image description here

答えて

15

そんなにコードが

protected void Page_Load(object sender, EventArgs e) 
{ 
    List<Student> listid = new List<Student>(); 
    SqlConnection con = new SqlConnection("........"); 
    string sql = "select * from StudentInfo"; 
    con.Open(); 
    SqlCommand cmd = new SqlCommand(sql, con); 
    SqlDataReader dr = cmd.ExecuteReader(); 
    while (dr.Read()) 
    { 
     Student stud = new Student(); 
     stud.Studid = Convert.ToInt32(dr["StudId"]); 
     stud.StudName = dr["StudName"].ToString(); 
     stud.StudentDept = dr["StudentDept"].ToString(); 
     listid.Add(stud);    
    } 
    GridView1.DataSource = listid; 
    GridView1.DataBind(); 
} 

でなければなりません。また、データリーダーにしながら、使用することをお勧めではありませんそれ以外の場合はあなたがコレクション
で同じデータを持つことになりますループ
ながら、内部のあなたのオブジェクトをインスタンス化する必要がありますか直接開く接続
usingステートメントを使用する必要があります。

using(SqlConnection con = new SqlConnection("connection string")) 
{ 

    con.Open(); 

    using(SqlCommand cmd = new SqlCommand("SELECT * FROM SomeTable", connection)) 
    { 
     using (SqlDataReader reader = cmd.ExecuteReader()) 
     { 
      if (reader != null) 
      { 
       while (reader.Read()) 
       { 
        //do something 
       } 
      } 
     } // reader closed and disposed up here 

    } // command disposed here 

} //connection closed and disposed here 
2

DataReader Whileループでは、データベーステーブルの各行の新しい生徒をインスタンス化します。

while (dr.Read()) 
{ 
var stud = new Student(); 
stud.Studid = Convert.ToInt32(dr["StudId"]); 
stud.StudName = dr["StudName"].ToString(); 
stud.StudentDept = dr["StudentDept"].ToString(); 
listid.Add(stud); 
} 
関連する問題