简而言之:我有一些数据库表数据要用来填充c#结构。
例如:
struct Phone
{
public int PhoneID;
public string Number;
}
struct Patient
{
public Phone WorkPhone;
}SQL表如下所示:
Patient table:
Patient ID, Patient Name, etc.
Phone table:
PhoneID, Number, Phone Type etc. 基本上,结构是SQL表的镜像。
我有通过select语句传递的主键(PhoneID)。因此,对于patient表,我将只检索一行,对于Phone表,我将最多检索5行(它们可以包含Work、Cell、Home等)。
我没有一个很好的方法来轻松地将这个表填充到一个结构中。我现在做的是一个接一个。你可以看到每个病人有数百个变量,这是一个非常乏味和高度代码密集型的过程。有没有办法,也许我可以在变量名中有一个变量,例如,如果列名是Phone,那么它就会填充Phone变量。希望这是有意义的。
query = "SELECT * FROM Phone p WHERE p.StatusID = 'A' AND ObjectTypeID = 'PA' AND ObjectID = '" + PatientID.ToString() + "'";
SqlDataAdapter a1 = new SqlDataAdapter(query, dataConnection);
DataTable t1 = new DataTable();
a1.Fill(t1);
DataTableReader r1 = t.CreateDataReader();
//object value = null;
while (reader.Read())
{
for (int i = 0; i < r1.FieldCount; i++)
{
if (!r1.IsDBNull(i))
{
if reader.GetValue(i)
switch (r1.GetName(i))
{
case "PhoneID": { pr.HomePhone.PhoneID = (int)reader.GetValue(i); break; }
case "PhoneTypeID": { pr.HomePhone.PhoneTypeID = (string)reader.GetValue(i); break; }
case "ObjectID": { pr.HomePhone.ObjectID = (int)reader.GetValue(i); break; }
case "ObjectTypeID": { pr.HomePhone.ObjectTypeID = (string)reader.GetValue(i); break; }发布于 2012-01-08 11:41:26
一般来说,可变结构是一个非常糟糕的想法。
您应该考虑使用许多可用ORM中的一个,这些ORM是专门为此目的而存在的。
如果你一心想要定制一些东西,那么一般的想法是非常简单的。
使用dynamic compilation或expressions
对数据读取器字段名使用reflection
https://stackoverflow.com/questions/8775142
复制相似问题