使用马蒂斯非常新,所以我不知道我是不是只是做错了什么。我有一个包含系统用户名和密码的表,以及以下方法......
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)) {
}
答案 0 :(得分:0)
现在已经对此进行了整理,事实证明我做错了。
而不是尝试使用阅读器检索值,而不是返回对象,然后使用它来创建包含所述对象的值的新用户,这是有效的。不确定这是否能真正解释这一切,所以这里是更新的,有效的代码。
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;
}