Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.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# 无法强制转换类型为';Npgsql.仅转发数据读取器';输入';对象';_C#_Postgresql_Datareader - Fatal编程技术网

C# 无法强制转换类型为';Npgsql.仅转发数据读取器';输入';对象';

C# 无法强制转换类型为';Npgsql.仅转发数据读取器';输入';对象';,c#,postgresql,datareader,C#,Postgresql,Datareader,尝试将数据插入列表时出现以下错误 “无法将'Npgsql.Forward Only DataReader'类型的对象强制转换为'object'类型” 这是我的代码。RDLCReportBase是用于在另一个类中继承的基类 public List<RDLCReportBase> GetList(RDLCReportBase reportbase,string ) { List<RDLCReportBase> list = new List&l

尝试将数据插入列表时出现以下错误

“无法将'Npgsql.Forward Only DataReader'类型的对象强制转换为'object'类型”

这是我的代码。RDLCReportBase是用于在另一个类中继承的基类

public List<RDLCReportBase> GetList(RDLCReportBase reportbase,string )
{
                List<RDLCReportBase> list = new List<RDLCReportBase>();

                Database.AddInParameter(reportbase.command, "culturecode", NpgsqlDbType.Varchar, cultureCode);

                using (IDataReader rdr = Database.ExecuteReader(reportbase.command))
                {
                    while (rdr.Read())
                    {                    
                        list.Add((RDLCReportBase)rdr);
                    }
                }


                return list;
}
public List GetList(RDLCReportBase reportbase,string)
{
列表=新列表();
AddInParameter(reportbase.command,“culturecode”,NpgsqlDbType.Varchar,culturecode);
使用(IDataReader rdr=Database.ExecuteReader(reportbase.command))
{
while(rdr.Read())
{                    
添加((RDLCReportBase)rdr);
}
}
退货清单;
}
有人知道如何解决这个问题吗


谢谢

我想你在这方面的问题是:

list.Add((RDLCReportBase)rdr);
你不能直接向你的班级施放IDataReader。相反,IDataReader帮助您通过索引器和方法访问当前行的列,以便您可以逐行处理所有接收的数据。要转到下一行,请使用rdr.Read()。因此,您的代码应该如下所示(当然,您必须用自己的名称替换属性和列名):

using (IDataReader rdr = Database.ExecuteReader(reportbase.command))
{
    while (rdr.Read())
    {                    
        var value = new RDLCReportBase
            {
                Property1 = rdr.GetInt32(0), // access zero column value wich is type of int
                Property2 = (string)rdr["Column2"], // access column value with name Column2 wich is type of string
                // and so on...
            };
        list.Add(value);
    }
}