2010-12-09 13 views
3

Ich muss Werte in einem multidimensionalen Array whilein eine while-Schleife hinzufügen. Aber ich weiß nicht wie.Hinzufügen eines Werts zu mehrdimensionalen Array in 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

Sie sollten in Erwägung ziehen, parametrisiertes SQL anstelle dessen zu verwenden, um SQL Injection-Angriffe zu vermeiden. –

+0

Nur ein Gedanke - Um dies zu vereinfachen, können Sie eine Liste oder ArrayList zurückgeben, wobei DailyAvgRating eine Klasse/struct/model ist, die CompanyId enthält, und Ihre SQL-Spalten (z. B. Num_Rating_Day, Rating_Gem, DayMonthYear). – byte

+1

@Graham Clark: Ich verstehe, was Sie sagen, und auf der ganzen parametrisierten Abfragen sind sicherer, aber da Boyd nur Zahlen eingibt, gibt es hier keinen SQL-Injektion Vektor. –

Antwort

2

Dies setzt voraus, dass alle Spalten in der Abfrage in das Array und alle Spalten zurückgegeben werden sollen.

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

Sie sollten dafür einen anderen Datentyp als Array verwenden.

Versuchen Sie, eine Liste der Arrays:

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

Problem ist, dass ich keine Wahl habe .. Ich muss das Array genau so füllen, weil so die Daten von einem anderen Teil behandelt werden vom System. – Boyd

+0

Dies funktioniert, außer Minen sind String statt Int. Wie kann ich die Liste nach String2 (int2) in Ihrem Fall sortieren? – Si8

0

Sie eine Datatable, indem Sie eine SqlDataAdapter (mit SELECT-Anweisung), und als DataAdapter.Fill (Datatable) nutzen könnten. So erhalten Sie eine DataTable mit allen von SQL-Anweisung zurückgegebenen Werten

Verwandte Themen