Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数据读取器和列表_C#_Asp.net_.net_Ado.net - Fatal编程技术网

C# 数据读取器和列表

C# 数据读取器和列表,c#,asp.net,.net,ado.net,C#,Asp.net,.net,Ado.net,我正在尝试创建一个列表,如下所示,并使用datareader中的值对其进行更新。我需要帮助编写代码,从数据读取器更新此列表 internal IList<FilingDto> LoadStatusDtofromReader(IDataReader reader) { IList<FilingDto> filingstatus = new List<FilingDto>(); while (rea

我正在尝试创建一个列表,如下所示,并使用datareader中的值对其进行更新。我需要帮助编写代码,从数据读取器更新此列表

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["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;
    }
DataTable FilingStatus=新数据表(“FilingStatus”);
SqlConnection sqlcon=新的SqlConnection(ConfigurationManager.ConnectionString[“CentralW2Database”].ConnectionString);
sqlcon.Open();
SqlCommand cmd=new-SqlCommand(“从dbo.FilingRequestQueue中选择CollectorGuid、FileStatus、FilingYear、ServiceLevel”,sqlcon);
使用(var dr=cmd.ExecuteReader())
{
IList list=LoadStatusDtofromReader(dr);
}
内部IList LoadStatusDtofromReader(IDataReader阅读器)
{
var filingstatus=新列表();
while(reader!=null&&reader.Read())
{
var dto=新文件dto
{
Controllerid=(Guid)读卡器[“Collectorid”],
Status=DBNull.Value.Equals(读卡器[“状态”])?string.Empty:读卡器[“状态”]。ToString(),
年份=转换.ToInt32((十进制)读取器[“年份]),
Level=DBNull.Value.Equals(reader[“Level”])?string.Empty:reader[“ServiceLevel”]。ToString()
};
文件状态。添加(dto);
}
返回文件状态;
}

您应该在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();
            }

我建议使用类似ORM的实体框架,而不是ADO.NET,如果您可以重用原始功能,只需执行以下操作

using (DataReader dr = cme.ExecuteReader()) 
{
    IList<FilingDto> list = LoadStatusDtofromReader(dr);
}
使用(DataReader dr=cme.ExecuteReader())
{
IList list=LoadStatusDtofromReader(dr);
}

代码正确。但是你应该返回'filingstatus'而不是'status'。你读过Datareader类的文档和示例了吗?有示例…您正在返回一个未声明的变量
status
。请发布至少有机会编译的内容。另外,如果要使用
数据读取器
,为什么要声明
数据表
?查看一下。好的,我了解了创建列表的相关知识,但是如何将数据读取器中的值读入该列表SqlConnection sqlcon=new SqlConnection(ConfigurationManager.Connectionstring[“Connectionstring”].Connectionstring);sqlcon.Open();SqlCommand cmd=newsqlcommand(“从dbo.abc中选择Collectorid、状态、年份、级别”,sqlcon);使用(IDataReader dr=谢谢。但是现在您可以帮助我从数据读取器读取值并填充列表SqlConnection sqlcon=new SqlConnection(配置管理器.ConnectionStrings[“CentralW2Database”].ConnectionString);sqlcon.Open();SqlCommand cmd=new SqlCommand(“从dbo.FilingRequestQueue中选择CollectorGuid、FileStatus、FilingYear、ServiceLevel”,sqlcon);IDataReader dr=cmd.ExecuteReader();while(dr.Read()){我在这一点上遇到了一个难题。如何像现在这样填充列表。filingstatus.Add(dto)@RashmiKR,编辑了我的帖子。请立即尝试。谢谢我需要将值添加到我的列表中,而不是将其作为输出写入。我该怎么做?我需要将此表中的值添加到我的列表中。请帮助我,如果您使用“using”关键字,如“..”using(SqlDataReader=cmd.ExecuteReader()),则无需显式调用.Close() {...} "
using (DataReader dr = cme.ExecuteReader()) 
{
    IList<FilingDto> list = LoadStatusDtofromReader(dr);
}