首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CBO.FillCollection抛出“没有为这个对象定义无参数的构造函数。”错误

CBO.FillCollection抛出“没有为这个对象定义无参数的构造函数。”错误
EN

Stack Overflow用户
提问于 2009-08-13 16:02:44
回答 2查看 1.7K关注 0票数 3

我正在尝试填充另一个方法返回的IDataReader中的集合...由于某些原因,它一直抛出“没有为这个对象定义无参数构造函数”。此行错误:

代码语言:javascript
复制
List<string> names = CBO.FillCollection<string>(DataProvider.Instance().ExecuteReader("getNames", new SqlParameter("UserId", 1)));

我试着分离出参数,这样事情就会被单独初始化,直到我有了这个:

代码语言:javascript
复制
List<string> names = CBO.FillCollection<string>(nameDataReader);

我仍然在同一行上得到一个错误。

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-08-13 16:23:40

线索就在消息里。System.String没有无参数的构造函数,因此不能使用Activator.CreateInstance创建它,后者通常用于动态创建对象。

编辑:一种解决方案是直接使用阅读器:

代码语言:javascript
复制
var strings = new List<string>();
using(var reader = DataProvider.Instance().ExecuteReader("getNames", new SqlParameter("UserId", 1)))
{
    while(reader.Read()) 
        strings.Add(reader[0] as string);
}
票数 5
EN

Stack Overflow用户

发布于 2010-08-18 15:22:58

CBO.FillCollection似乎在值类型方面有问题。

更好的答案已经发布(直接访问阅读器),但是要理解FillCollection方法寻找的是什么,您可以使用以下命令解决您的问题:

添加一个属性设置为SQL列名的新类:

代码语言:javascript
复制
class StringRow { public string Name; } 

使用它传递给FillCollection,如下所示:

代码语言:javascript
复制
List<string> stringCollection = new List<string>();
foreach (StringRow row in CBO.FillCollection<StringRow>(DataProvider...)) 
{
    stringCollection.Add(row.Name);
}

它想要一个具有可反射设置的命名属性的对象。因此,即使您检索的是一个名称列表,int对象也没有要设置的‘int’属性(从SQL返回集中的列中提取),在这种情况下,它将返回一个0的列表。

不幸的是,使用int?并将SQL返回列设置为Value并不能解决问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1272931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档