在没有定义属性的情况下操纵数据库中的数据

时间:2015-08-18 15:52:27

标签: c# sql-server asp.net-mvc database asp.net-mvc-5

我的数据包含大量包含大量(和非常量)列数的数据库。理想情况下,用户可以从下拉列表中选择从哪个数据库中提取数据,然后以图表的形式将数据读取到这些数据库中。我的问题在于从数据库中提取数据。

我希望查询所选数据库的每一列。使用我习惯使用的实体框架,我必须为每个列定义属性才能访问该列的数据。像这样:

public class exampleModel() {
    public int data1 { get; set; }
    public int data2 { get; set; }
    // etc.
}

但是,由于我不知道在运行时所选数据库中有多少列,所以我不能事先对属性进行硬编码。

此外,由于我的公司使用的是SQL Server 2000,因此我不能使用数据库优先的Entity Framework,因为脚手架系统在2005年之前不支持SQL Server。

处理这种情况的正确方法是什么?有没有一种方法可以使用INFORMATION_SCHEMA.COLUMNS查询数据库的列数而无需为每个数据库设置模型类?有点像:

SELECT COLUMN_NAME, *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'your table'

编辑:

因此,对于对我最终解决此问题感兴趣的任何人,我将分享我的扩展方法。这个方便的小方法将设置和SQL连接并读取您提供的任何SQL命令,允许您查询未通过Entity Framework属性系统设置的数据库。

public static class ConnectionTools {
    public static DataTable GetData(this DbContext database) 
    {
        using (SqlConnection c = new SqlConnection(
                    System.Configuration.ConfigurationManager.ConnectionStrings["ChartConn"].ConnectionString))
            {
                c.Open();
                using (SqlDataAdapter a = new SqlDataAdapter(
                      "SELECT * FROM Holidays", c))
                {
                    DataTable t = new DataTable();
                    a.Fill(t);
                    return t;
                }
            }
    }
}

请注意,可以轻松地向此扩展方法添加额外参数以更改SQL语句。

1 个答案:

答案 0 :(得分:0)

您是否尝试了SqlDataAdapter()和DataSet - DataSet dsRecordSet = new DataSet(); sqlDap = new SqlDataAdapter(query, sqlConn); sqlDap.Fill(dsRecordSet); return(dsRecordSet.Tables[0]);另一种方法是使用 DbDataReader < / p>

这是一个应该有用的链接。 Link

以下是DbDataReader

上的链接