在没有定义属性的情况下操作数据库中的数据
本文关键字:操作数 数据库 数据 操作 情况下 定义 属性 | 更新日期: 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的链接