【发布时间】:2016-08-21 14:16:34
【问题描述】:
好的,我有 3 个班级:Teacher、Student 和 Database。我想从数据库中读取数据并将其放入 Teacher 或 Student。所以我必须写这样的东西:
public Teacher dbSelect(string Table="Teacher")
{
Table = char.ToUpper(Table[0]) + Table.Substring(1);
string query = "SELECT * FROM " + Table + ";";
return dbConnect(query, true);
}
但我必须有这个确切的方法,学生返回:
public Student dbSelect(string Table="Student")
{
Table = char.ToUpper(Table[0]) + Table.Substring(1);
string query = "SELECT * FROM " + Table + ";";
return dbConnect(query, true);
}
现在我可以在它们的 ViewModel 中编写每一个,但我想将它们放在 Database 类中。那么有没有办法做到这一点呢?
(我知道我可以将它们返回一个列表,然后使用该列表,但只是想知道是否有办法!)
更新: 我忘了把 dbConnect 放在这里,所以:
public List<Teacher> dbConnect(string query)
{
SQLiteConnection conn = null;
SQLiteCommand command = null;
SQLiteDataReader reader = null;
Teacher result = new Teacher(null, null, null, null, null, null, null, null);
// try
{
conn = new SQLiteConnection(db.db);
conn.Open();
command = new SQLiteCommand(query, conn);
reader = command.ExecuteReader();
}
// catch (Exception ex) { }
while (reader.Read())
{
Teacher temp = new Teacher(
reader[0].ToString(),
reader[1].ToString(),
reader[2].ToString(),
reader[3].ToString(),
reader[4].ToString(),
reader[5].ToString(),
reader[6].ToString(),
reader[7].ToString()
);
result.Items.Add(temp);
}
conn.Close();
return result.Items;
}
对于学生来说,同样的事情仍然存在,但返回:
public List<Student> dbConnect(string query)
{
...
}
回答:我有一个 Base 类,当然想返回一个具有特定类型的 List,所以我使用了 @Jauch 回答,但返回 List。
【问题讨论】:
-
嗨@Mostafa。一些想法。 1. 两个例程将返回完全相同的值,即 dbConnect 返回的值。 2、cbConnect返回的可能READER和Student/Teacher是什么关系?
-
你好@Jauch。一名返校学生,一名返校教师。实际上,这就是我必须提出的问题! :D。我马上去修!
-
啊...现在清楚多了:)
-
我做了类似的事情,但是我使用了一个基于泛型和接口的系统。为了“填充”可以具有不同列/属性的对象(例如教师或学生),我使用反射将阅读器中的列与对象中的属性相匹配。
-
如果你能给我一个例子,那就太好了。因为我不知道它们是如何工作的。非常感谢。