C# 无法强制转换类型为';Npgsql.仅转发数据读取器';输入';对象';
尝试将数据插入列表时出现以下错误 “无法将'Npgsql.Forward Only DataReader'类型的对象强制转换为'object'类型” 这是我的代码。RDLCReportBase是用于在另一个类中继承的基类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
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);
}
}