当列名和计数可能不同时,如何从数据库中提取可枚举数据表



我如何从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);

相关内容

最新更新