【问题标题】:Adding an value to multidimensional array in c# asp.net在c#asp.net中向多维数组添加一个值
【发布时间】:2010-12-09 13:48:04
【问题描述】:

我需要在一个 while 循环中添加一个多维数组中的值。但我不知道怎么做。

public Array getDailyAvgRatingByCompanyId(int companyId, int periodStart = 0, int periodEnd = 0)
        {
            int[,] arr = { { }, { } };

            string queryString = "SELECT num_ratings_day, rating_gem, daymonthyear FROM company_rating_daily_avg WHERE company_id = " + companyId + " ORDER BY daymonthyear ASC";
            SqlDataReader myDataReader = Database.sqlDataReader(queryString);

            if (myDataReader.HasRows)
            {
                while (myDataReader.Read())
                {
                    //Something like arr[0].Push(myDataReader['num_ratings_day']
                }
            }

            return arr;
        }

【问题讨论】:

  • 您可能需要考虑使用参数化 SQL 而不是现有的 SQL,以避免 SQL 注入攻击。
  • 只是一个想法 - 为了简化这一点,您可以返回一个 List 或 ArrayList,其中 DailyAvgRating 是一个包含 CompanyId 的类/结构/模型,以及您的 SQL 列(例如 Num_Rating_Day、Rating_Gem、DayMonthYear ) 结果。
  • @Graham Clark:我明白你的意思,总的来说参数化查询更安全,但由于 Boyd 只输入数字,这里没有 SQL 注入向量。
  • 你的数组的索引代表什么,boyd?是arr[row, col]吗?
  • @Matt 它必须填充要由图形类处理的数据。所以它必须包含 x 和 y 的值。像 { {x1, x2, x3}, {y1, y2, y3} }

标签: c# asp.net arrays


【解决方案1】:

这假设您希望查询中的所有列都放入数组中,并且所有列都返回整数。

public Array getDailyAvgRatingByCompanyId(int companyId, int periodStart = 0, int periodEnd = 0)
{
    List<int[]> rowList = new List<int[]>();

    string queryString = "SELECT num_ratings_day, rating_gem, daymonthyear FROM company_rating_daily_avg WHERE company_id = " + companyId + " ORDER BY daymonthyear ASC";
    SqlDataReader myDataReader = Database.sqlDataReader(queryString);

    if (myDataReader.HasRows)
    {
        while (myDataReader.Read())
        {
            int[] values = new int[3];
            values[0] = myDataReader['num_ratings_day'];
            values[1] = myDataReader['rating_gem'];
            values[2] = myDataReader['daymonthyear'];
            rowList.add(values);
        }
    }

    int[,] arr = new int[rowList.Count, 3];

    for(int i = 0; i < rowList.Count; ++i)
    {
        for(int j = 0; j < 3; ++j)
        {
            arr[i,j] = rowList[i][j];
        }
    }

    return arr;
}

【讨论】:

    【解决方案2】:

    您应该为此使用 Array 以外的数据类型。

    尝试使用数组列表:

    var list = new List<int[]>();
    
    if (myDataReader.HasRows)
    {
        while (myDataReader.Read())
        {
            var int1 = ??; // Get data 1
            var int2 = ??; // Get data 2
    
            list.Add(new[] { int1, int2 });
        }
    }
    

    【讨论】:

    • 问题是我别无选择。我需要完全以这种方式填充数组,因为系统的另一部分就是这样处理数据的。
    • 这行得通,除了地雷是字符串而不是整数。在您的情况下,如何按 string2 (int2) 对列表进行排序?
    【解决方案3】:

    您可以通过创建 SqlDataAdapter(使用 SELECT 语句)而不是 DataAdapter.Fill(DataTable) 来使用 DataTable。 因此,您检索一个 DataTable,其中包含 sql 语句返回的所有值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-13
      • 2021-12-29
      • 2017-09-04
      • 1970-01-01
      • 1970-01-01
      • 2017-12-22
      • 2021-04-21
      相关资源
      最近更新 更多