-1

我从 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 ?;
    }
4

1 回答 1

1

如果生成的对象是完全动态的,则可以使用字典而不是强类型对象。或者,如果您至少想要一个对象,请使用动态对象。使用dynamic关键字和 aList<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));
   }
}
于 2013-09-25T19:32:16.687 回答