如何返回与数据库中记录对应的对象列表?

时间:2013-09-21 21:57:26

标签: c# dynamic system.reflection

我是C#的新手,我正在努力解决所有问题,请帮忙。这是我想要做的:

创建一个数据库类,它返回一个动态列表,该列表包含一个类的实例,具体取决于要查询的表:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Reflection;

    Class MYDatabase{

    public void main ()
    {
         String QueryString="select COLUMN_NAME, DATA_TYPE from information_schema.columns where table_name = 'mytable'";
         Object MyData=GetRsults(QueryString,"SchemaStructure");
    }

    public static Object GetResults(string QueryString, String ClassName)
    {

        SqlCommand cmd = new SqlCommand();
        SqlDataReader reader;

        cmd.CommandText = QueryString;
        cmd.CommandType = CommandType.Text;
        //assuming I already defined my connection
        cmd.Connection = Connection;

        Connection.Open();

        reader = cmd.ExecuteReader();

        Type ClassType = Type.GetType(ClassName);
        Type ListType = typeof(List<>).MakeGenericType(new Type[] { ClassType });
        Object Results = Activator.CreateInstance(ListType);
        Object SingleResult = Activator.CreateInstance(ClassType);

        while (reader.Read())
        {

            for (int i = 0; i < reader.FieldCount; i++)
            {
                var PropName= SingleResult.GetType().GetProperty(reader.GetName(i).ToString());
                //Convert.ChangeType(value, propertyInfo.PropertyType)
                PropName.SetValue(PropName,reader.GetValue(i).ToString(),null);

            }
            Results.Add(SingleResult);

        }
        Connection.Close();

        return Results;
    }
    }

class SchemaStructure
{
    public string COLUMN_NAME { set; get; }
    public string DATA_TYPE { set; get; }

}

这不起作用,行Results.Add(SingleResult);给我一条消息

&#39;对象&#39;不包含&#39;添加&#39;的定义没有扩展方法&#39;添加&#39;接受类型&#39;对象&#39;的第一个参数。可以找到(你错过了使用指令或程序集引用吗?)

有人可以帮我解决这个问题吗?

如果我的方法根本没有意义,我愿意接受其他建议。

由于

1 个答案:

答案 0 :(得分:0)

我认为最重要的是,当您拥有实体框架时,我不会手动滚动我的POCO对象。使用NuGet将最新版本的Entity添加到您的项目中,然后您可以右键单击您的项目并使用Entity的“逆向工程师代码优先”功能来构建您的模型。这当然假设您使用的是实体可以连接的数据库,并且已经构建了数据库...

您可以在此处阅读有关EF的信息:http://msdn.microsoft.com/en-us/data/ef.aspx