我如何写一个方法,从一个列表结构的马蒂斯表返回所有记录

本文关键字:马蒂斯 结构 记录 列表 返回 方法 何写一 一个 | 更新日期: 2023-09-27 18:17:22

对马蒂斯很陌生,所以我不知道我是不是做错了还是怎么的。我有一个包含系统用户名和密码的表,以及以下方法…

    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;
    }

我希望它能简单地从表中取出所有记录,将它们放到一个列表中并返回该列表。然而,问题出在这一行代码上。

    Users obj = new Users(db, 0x10ff);

我似乎只能拉一条记录,输入'0x10ff'作为参数(记录OID)将返回该记录,它适用于我尝试的任何记录。留空(即:'(db)')抛出Matisse异常(InvalidOperation),并且输入除特定记录OID以外的任何其他内容将返回ObjectNotFound异常。我是不是做了什么蠢事?我错过了什么?

感谢

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

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

至于构造函数,当我从马蒂斯(Matisse)中导入类时,我将它们作为默认的构造函数。

//  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)) {
}

我如何写一个方法,从一个列表结构的马蒂斯表返回所有记录

现在已经整理好了,原来是我做错了。

不尝试使用阅读器检索值,如果您返回对象,然后使用它来创建包含所述对象值的新User,则可以工作。不确定这是否真的解释得很好,所以这里是更新后的工作代码。

    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;
    }