我的数据包含大量包含大量(和非常量)列数的数据库。理想情况下,用户可以从下拉列表中选择从哪个数据库中提取数据,然后以图表的形式将数据读取到这些数据库中。我的问题在于从数据库中提取数据。
我希望查询所选数据库的每一列。使用我习惯使用的实体框架,我必须为每个列定义属性才能访问该列的数据。像这样:
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语句。
答案 0 :(得分:0)
您是否尝试了SqlDataAdapter()
和DataSet - DataSet dsRecordSet = new DataSet();
sqlDap = new SqlDataAdapter(query, sqlConn);
sqlDap.Fill(dsRecordSet);
return(dsRecordSet.Tables[0]);
另一种方法是使用 DbDataReader < / p>
这是一个应该有用的链接。 Link
以下是DbDataReader
上的链接