我很难找到一个教程来教我如何使用MySqlReader(与MySQL一起)通过类对象插入或接收数据。解释者如下所示。
我使用过的地方http://json2csharp.com/为了创建这些类,我知道如何将类对象序列化/反序列化为JSON。我的问题实际上在于通过MySqlDataReader将来自数据库连接器内外的许多不同表的数据获取到类对象中。
我不知道这是否重要,但我正在使用.Net 2.0和C#3.0(visual studio 2010)。提前感谢您的任何评论或回复。
public class Boardingzone
{
public string zone { get; set; }
public string time { get; set; }
}
public class Serial
{
public string rsn { get; set; }
public List<Boardingzone> boardingzone { get; set; }
}
public class RootObject
{
public string name { get; set; }
public List<Serial> serial { get; set; }
}
这是我迄今为止尝试过的
string sql = "SELECT Route.RName, RouteSerial.RSN, Stop.StopName, TimeTable.BoardTime FROM TimeTable INNER JOIN Stop ON TimeTable.StopID = Stop.StopID INNER JOIN RouteSerial ON TimeTable.RSN = RouteSerial.RSN INNER JOIN Route ON RouteSerial.RID = Route.RID";
MySqlCommand cmd = new MySqlCommand(sql, conn);
MySqlDataReader rdr = cmd.ExecuteReader();
ArrayList name = new ArrayList();
ArrayList rsn = new ArrayList();
ArrayList zone = new ArrayList();
ArrayList time = new ArrayList();
while (rdr.Read()){
string val = "";
val = rdr.GetValue(0).ToString();
name.Add(val);
val = rdr.GetValue(1).ToString();
rsn.Add(val);
val = rdr.GetValue(2).ToString();
zone.Add(val);
val = rdr.GetValue(3).ToString();
time.Add(val);
}
rdr.Close();
conn.Close();
您几乎做对了。在不涉及太多细节的情况下,您需要实例化要填充的类:
var currentRoot = null;
var rootObjects = new List<RootObject>();
while (rdr.Read()){
string name= rdr.GetValue(0).ToString();
string serial = rdr.GetValue(1).ToString();
string bz = rdr.GetValue(2).ToString(); <-- made this up
if( currentRoot == null || currentRoot.name != name )
{
if( currentRoot != null ){
rootObjects.Add(currentRoot);
}
currentRoot = new RootObject();
currentRoot.name = name;
}
currentRoot.serials.Add(new Serial(){zone = bz});
... instantiate other classes
}
rdr.Close();
foreach( var rootObj in rootObjects) doSomethingWithRootObj(rootObj);
希望能有所帮助。
我不确定填充ArrayList的目的是什么,您必须通过映射或手动从ArrayList中填充Model。
对于一个简单的例子,为什么你不能在这里填充你的模型?
一个很好的方法是将模型保存在一个单独的程序集中,然后DAL可以引用该程序集来填充适当的类。
更好的是,如果你可以将你的模型公开为接口,那么DAL只需要使用这些接口,并且可以有自己的实现——不确定你使用的序列化方法是否可能做到这一点。