0

以下のようにリストを作成し、データリーダーからの値で更新しようとしています。データ リーダーからこのリストを更新するためのコードを書くのに助けが必要です。

internal IList<FilingDto> LoadStatusDtofromReader(IDataReader reader)
        {
            IList<FilingDto> filingstatus = new List<FilingDto>();

            while (reader !=null && reader.Read())
             {
                var dto = new FilingDto();
                var Year = (Decimal)reader["Year"];
                dto = new FilingDto()
                {

                    Controllerid = (Guid)reader["Collectorid"],
                    Status = DBNull.Value.Equals(reader["Status"]) ? string.Empty : reader["Status"].ToString(),
                    Year = Convert.ToInt32(Year),
                    Level = DBNull.Value.Equals(reader["Level"]) ? string.Empty : reader["ServiceLevel"].ToString()
                };

                filingstatus.Add(dto);
            }

            return status;
        }

データリーダーから読み取るコードは次のとおりですが、間に詰まっています。これを完了するのを手伝ってください

DataTable FilingStatus = new DataTable("FilingStatus");
                SqlConnection sqlcon = new SqlConnection(ConfigurationManager.ConnectionStrings["Connectionstring"].ConnectionString);
                sqlcon.Open();
                SqlCommand cmd = new SqlCommand("select Collectorid, Status, Year, Level from dbo.abc", sqlcon);

                using (IDataReader dr =  
4

3 に答える 3

1

これを試して、

    DataTable FilingStatus = new DataTable("FilingStatus");
    SqlConnection sqlcon = new SqlConnection(ConfigurationManager.ConnectionStrings["CentralW2Database"].ConnectionString); 
    sqlcon.Open();
    SqlCommand cmd = new SqlCommand("select CollectorGuid, FileStatus,FilingYear, ServiceLevel from dbo.FilingRequestQueue", sqlcon);

    using (var dr = cmd.ExecuteReader()) 
    {
       IList<FilingDto> list = LoadStatusDtofromReader(dr);
    }

    internal IList<FilingDto> LoadStatusDtofromReader(IDataReader reader)
    {
        var filingstatus = new List<FilingDto>();

        while (reader != null && reader.Read())
        {
            var dto = new FilingDto
            {
                Controllerid = (Guid)reader["Collectorid"],
                Status = DBNull.Value.Equals(reader["Status"]) ? string.Empty : reader["Status"].ToString(),
                Year = Convert.ToInt32((Decimal)reader["Year"]),
                Level = DBNull.Value.Equals(reader["Level"]) ? string.Empty : reader["ServiceLevel"].ToString()
            };

            filingstatus.Add(dto);
        }

        return filingstatus;
    }
于 2012-11-15T14:39:01.333 に答える
1

SqlCommandオブジェクトでExecuteReaderを呼び出す必要があります

SqlCommand cmd = new SqlCommand("select Collectorid, Status, Year, Level from dbo.abc", sqlcon);
            SqlDataReader reader = cmd.ExecuteReader();
            try
            {
                while (reader.Read())
                {
                    Console.WriteLine(String.Format("{0}, {1}",
                        reader[0], reader[1]));
                }
            }
            finally
            {
                // Always call Close when done reading.
                reader.Close();
            }

ADO.NETの代わりにEntityFrameworkのようなORMを使用することをお勧めします

于 2012-11-15T14:41:49.070 に答える
0

元の関数を再利用できる場合は、そのまま実行してください

using (DataReader dr = cme.ExecuteReader()) 
{
    IList<FilingDto> list = LoadStatusDtofromReader(dr);
}
于 2012-11-15T15:25:38.600 に答える