我从SQL Server获得具有可变列名的动态列数的查询结果。 如何将datareader的结果转换为通用列表List?
public ? getItems(string orderId)
{
SqlConnection sqlConn = new SqlConnection(conn);
SqlCommand command = new SqlCommand();
SqlDataReader reader;
try
{
sqlConn.Open();
command.Connection = sqlConn;
command.CommandText = "usp_get_orders";
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new SqlParameter("@Id", orderId)));
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
?
}
reader.Close();
}
catch (Exception exp)
{
}
finally
{
command.Dispose();
command1.Dispose();
sqlConn.Close();
sqlConn.Dispose();
}
return ?;
}
答案 0 :(得分:1)
如果结果对象是完全动态的,则可以使用字典而不是强类型对象。或者,如果您至少想要一个对象,请使用动态对象。使用dynamic
关键字和List<dynamic>
或使用DynamicObject
。
字典的差异并不是那么大......
这样的事情可以做到:
SqlDataReader reader = command.ExecuteReader();
var listOfValues = new Dictionary<string, object>();
while (reader.Read())
{
for(int i = 0; i <reader.FieldCount;i++)
{
listOfValues.Add(reader.GetName(i), reader.GetValue(i));
}
}