1

リストが上書きされるため、WebGrid への出力に問題があります。最終的には、グリッドのすべての行に対して最終行のデータが書き込まれます。データが継続的に追加され、大量のデータを見ているため、while ループを使用する必要があるため、別のリストに書き込まないようにしています。

public class ChemData
{
    string strSQLconnection = "Server=Server;Database=data;Uid=Username;Pwd=Password";

    public int productId { get; set; }
    public string productName { get; set; }

    public List<ProdData> ProdList = new List<ProdData>();

    public List<ProdData> ProdDataPull()
    {
        ProdData Analysis = new ProdData();
        SqlDataReader reader = null;
        SqlConnection conn = new SqlConnection(strSQLconnection);
        SqlCommand query = new SqlCommand("Select * from producttable");

        conn.Open();
        query.Connection = new SqlConnection(strSQLconnection);
        query.Connection.Open();
        reader = query.ExecuteReader();
        while (reader.Read())
        {
            if (!reader.IsDBNull(0)) Analysis.productId = reader.GetInt32(0);
            if (!reader.IsDBNull(1)) Analysis.productName = reader.GetString(1);

            ProdList.Add(Analysis);
         } 
         return ChemList;
   } 
 }
4

1 に答える 1

2

これは、Analysis一度しか作成されないためです。毎回リストに追加すると、同じオブジェクトへの参照が追加されます。作成を while ループ内に移動すると、これが修正されます。

while (reader.Read())
{
    ProdData Analysis = new ProdData();
    if (!reader.IsDBNull(0)) Analysis.productId = reader.GetInt32(0);
    if (!reader.IsDBNull(1)) Analysis.productName = reader.GetString(1);

    ProdList.Add(Analysis);
}

これにより、ループの反復ごとに新しいProdDataオブジェクトが作成され、それが に割り当てられAnalysisます。次に、その内容が更新され、その参照がリストに追加されます。

外部の作成によりAnalysis、ループAnalysisは同じオブジェクトを指し続け、そのProdDataオブジェクトはリストに何度も追加され、その値は毎回上書きされます。

参照:参照型と値型

于 2013-03-07T00:10:01.103 に答える