2010-12-09 1 views
3

Мне нужно добавить значения в многомерном массиве whitin while while. Но я не знаю, как это сделать.Добавление значения к многомерному массиву в C# asp.net

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; 
     } 
+0

Возможно, вы захотите рассмотреть возможность использования параметризованного SQL вместо того, что у вас есть, чтобы избежать атак SQL-инъекций. – 2010-12-09 13:56:30

+0

Просто мысль. Чтобы упростить это, вы можете сказать, что List или ArrayList, где DailyAvgRating - это класс/структура/модель, которая содержит CompanyId, и ваши SQL-столбцы (например, Num_Rating_Day, Rating_Gem, DayMonthYear). – byte 2010-12-09 13:58:56

ответ

2

Это предполагает, что вы хотите, чтобы все столбцы в запросе помещались в массив и чтобы все столбцы возвращали ints.

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; 
} 
1

Для этого вам следует использовать для этого тип данных, отличный от 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 }); 
    } 
} 
0

Вы можете использовать DataTable, создавая SqlDataAdapter (с оператором SELECT), и чем DataAdapter.Fill (DataTable). Итак, вы получаете DataTable со всеми значениями, возвращаемыми оператором sql

Смежные вопросы