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

本文关键字:操作数 数据库 数据 操作 情况下 定义 属性 | 更新日期: 2023-09-27 18:08:28

我的数据包含大量数据库,这些数据库包含大量(非恒定)列。理想情况下,用户将从下拉菜单中选择要从哪个数据库中提取数据,然后以图表的形式将该数据读取给他们。我的问题在于从数据库中提取数据。

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

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

但是,由于我不知道在运行时选定的数据库中有多少列,因此我无法事先硬编码这些属性。

另外,因为我的公司使用的是SQL Server 2000,我不能使用数据库优先的实体框架,因为脚手架系统不支持2005年之前的SQL Server。

处理这种情况的正确方法是什么?是否有一种方法可以使用INFORMATION_SCHEMA.COLUMNS来查询数据库的列数,而无需为每个数据库设置模型类?类似以下语句:
SELECT COLUMN_NAME, *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'your table'

编辑:

所以对于任何对我如何解决这个问题感兴趣的人,我将分享我的扩展方法。这个方便的小方法将设置SQL连接并读取你给它的任何SQL命令,允许你查询没有通过实体框架属性系统设置的数据库。

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语句。

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

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

这里有一个链接,应该有帮助。链接

这是一个关于DbDataReader的链接