首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何编写一个方法,以列表结构返回Matisse表中的所有记录?

我如何编写一个方法,以列表结构返回Matisse表中的所有记录?
EN

Stack Overflow用户
提问于 2013-06-07 08:22:30
回答 1查看 180关注 0票数 0

马蒂斯是个新手,所以我不知道我是不是真的做错了什么。我有一个表,其中包含系统的用户名和密码,以及以下方法...

代码语言:javascript
复制
    public List<Users> FindUsers()
    {

        List<Users> users = new List<Users>();
        //Users obj;
        executeCmd("SELECT * FROM Users");
        while (Reader.Read())
        {
            Users obj = new Users(db, 0x10ff);
            users.Add(obj);
        }
        reader.Close();
        return users;

    }

我曾希望它可以简单地从表中拉出所有记录,将它们放入一个列表中,然后返回该列表。然而,问题出在这里的这行代码上。

代码语言:javascript
复制
    Users obj = new Users(db, 0x10ff);

我似乎只能拉取一条记录,输入'0x10ff‘作为参数(记录OID)将返回该记录,这适用于我尝试的任何记录。将其保留为空(即'(db)‘)会抛出一个ObjectNotFound异常(InvalidOperation),输入除特定记录OID之外的任何其他内容都会返回一个Matisse异常。我是不是做了件很愚蠢的事?我遗漏了什么?

谢谢

编辑: db指的是数据库连接,如下所示,DBAcess是一个具有连接和查询功能的类。

代码语言:javascript
复制
    private MtDatabase db;

    public DBAccess()
    {
        db = new MtDatabase(Properties.Settings.Default.Host, Properties.Settings.Default.Database);
        db.Open();
    }

至于构造器,当我从Matisse导入类时,我将它们保留为默认构造器

代码语言:javascript
复制
//  Generated constructor, do not modify
/// <summary>
/// The factory constructor
/// </summary>
/// <param name="db">a database</param>
/// <param name="mtOid">an existing object ID in the db</param>
public Users(MtDatabase db, int mtOid) : 
        base(db, mtOid) {
}

//  Generated constructor, do not modify
/// <summary>
/// Cascaded constructor, used by subclasses to create a new object in the database
/// </summary>
/// <param name="clsObj">the class descriptor of the class to instantiate</param>
protected Users(MtClass clsObj) : 
        base(clsObj) {
}


#endregion

//  GEN_END: Matisse Generated Code - Do not modify


//  Generated constructor
/// <summary>
/// Default constructor provided as an example. NOTE: You may modify or delete this constructor
/// </summary>
/// <param name="db">a database</param>
public Users(MtDatabase db) : 
        base(GetClass(db)) {
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-17 22:49:40

现在已经解决了这个问题,结果证明我只是做错了。

如果您返回对象,然后使用该对象创建一个包含所述对象的值的新用户,而不是尝试使用读取器来检索值,这是可行的。我不确定这是否真的能很好地解释这一切,所以这里是更新后的工作代码。

代码语言:javascript
复制
    public List<Users> FindUsers()
    {
        List<Users> users = new List<Users>();
        executeCmd("SELECT REF(Users) FROM Users c");
        while (Reader.Read())
        {
            MtObject obj = Reader.GetObject(0);
            users.Add(new Users(db, obj.MtOid));
        }
        Reader.Close();
        return users;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16974346

复制
相关文章

相似问题

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