我如何从sql server数据库中的数据表中提取数据,因为我知道该表可能根据请求具有不同的列名/列计数?
我通常会使用SqlDataAdapter,然后执行:da.Fill(dt)
,但这不是一个选项,因为我无法在剃刀视图中枚举dataTable。我希望在使用Razor Pages的视图中复制该表。
以下是我通常可以做的一个例子,但它涉及到确切地知道列名是什么以及有多少。我可以在while
中放入什么来返回可枚举类型的所有表数据?:
SqlConnection connectionCalc = new SqlConnection("<connectionString>");
if (connectionCalc.State.Equals(ConnectionState.Closed))
connectionCalc.Open();
using (var command = connectionCalc.CreateCommand())
{
command.CommandText = $@"SELECT * FROM {tableName}";
SqlDataReader reader = command.ExecuteReader();
column = new Dictionary<string, string>();
int FATUidSingle = -999;
while (reader.Read())
{
TableUid.Add(reader[SelectedCalculation + "TABLE_UID"].ToString());
FATUid.Add(Convert.ToInt32(reader["FAT_UID"]));
ScheduledDate.Add(Convert.ToDateTime(reader["SOME_DATE"]));
TableStatusUid.Add(reader[SelectedCalculation + "ST_UID"].ToString());
StartDate.Add(Convert.ToDateTime(reader["ANOTHER_DATE"]));
EndDate.Add(Convert.ToDateTime(reader["OTHER_DATE"]));
Progress.Add(reader["PROGRESS"].ToString());
}
首先运行这样的命令来获取字段名称,然后您就会知道需要哪些字段。您可以使用它来构建SQL,并将序数设置为指向您想要的列
SELECT TABLE_NAME, COLUMN_NAME FROM
INFORMATION_SCHEMA.COLUMNS
where table_name = 'EmployeeDetail'
当您创建可枚举列表时,可以创建字符串和对象的"元组"列表,其中字符串是字段名,对象是值
如果您只关心确切的名称,但您知道列序列和数据类型,那么您可以简单地依赖select语句中的列索引。E.g
Select * from Orders
订单表可能有3列。Id、Name和Price,其中Id为int,Name为string,Price为long。
所以你可以做:
var id = reader.GetInt32(0);
var name = reader.GetString(1);
var price = reader.GetInt64(2);