2017-03-09 4 views
-1

Ich schreibe einen Code, der Daten von SQL Server mit SP abruft. Aber ich weiß nicht, wie ich eine Variable oder Eigenschaft speichern soll. Die SQL-Skripte konvertieren die Zeile in Spalten mithilfe der PIVOT-Funktion von SQL Server.Wie speichern Sie die Daten in einer Variablen oder Eigenschaft aus einer Liste <string[]>()?

Beispielcode:

public List<string[]> GetAllFlatType(long? id) 
     { 
      var list = new List<string[]>(); 

      using (
       var cn = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString) 
      ) 
      { 
       cn.Open(); 
       var cmd = new SqlCommand("SP_Calc_By_Flat_Type_with_Total", cn) 
       { 
        CommandType = CommandType.StoredProcedure 
       }; 

       cmd.Parameters.AddWithValue("@LandID", id); 

       using (var rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) 
       { 
        while (rdr.HasRows) 
        { 
         while (rdr.Read()) 
         { 
          var rows = new string[rdr.FieldCount]; 

          for (var i = 0; i < rdr.FieldCount; i++) 
           rows[i] = rdr[i] == DBNull.Value ? string.Empty : rdr[i].ToString(); 
          list.Add(rows); 
         } 
         rdr.NextResult(); 
        } 
        rdr.Close(); 
       } 
       cn.Close(); 
      } 

      return list; 
     } 

Daten:

{ 
    "data": [ 
    [ 
     "1", 
     "Total Transaction Amount", 
     "520400958", 
     "12210558", 
     "349786707", 
     "124624122", 
     "33779571" 
    ], 
    [ 
     "1", 
     "No. of units", 
     "109", 
     "3", 
     "76", 
     "25", 
     "5" 
    ], 
    [ 
     "1", 
     "(Total sq.ft.)", 
     "46800", 
     "900", 
     "30400", 
     "12500", 
     "3000" 
    ], 
    [ 
     "1", 
     "Avg. price", 
     "4774320", 
     "4070186", 
     "4602456", 
     "4984964", 
     "6755914" 
    ], 
    [ 
     "1", 
     "Avg. sq.ft.", 
     "11119", 
     "13567", 
     "11506", 
     "9969", 
     "11259" 
    ], 
    [ 
     "1", 
     "Max. price", 
     "7947521", 
     "4418469", 
     "7947521", 
     "7465860", 
     "7293834" 
    ], 
    [ 
     "1", 
     "Max. sq.ft", 
     "19868", 
     "14728", 
     "19868", 
     "14931", 
     "12156" 
    ], 
    [ 
     "1", 
     "Min. price", 
     "3241412", 
     "3857581", 
     "3241412", 
     "3566034", 
     "6162669" 
    ], 
    [ 
     "1", 
     "Min. sq.ft", 
     "7132", 
     "12858", 
     "8103", 
     "7132", 
     "10271" 
    ] 
    ] 
} 

enter image description here

+1

Der SqlServer gibt diese Daten zurück? Werfen Sie einen Blick auf JSON – lokusking

+0

ja Sir, werfen Sie einen Blick auf diese https://i.stack.imgur.com/aSdGK.png – Chuck

+0

@lokusking Wie füge ich Sir einen Namen der Eigenschaft hinzu? – Chuck

Antwort

0

Ich würde Ihnen die folgende Art und Weise empfehlen. Erstellen Sie eine Klasse, die Ihre Datastructure darstellt:

//You can find a better name for Data 
public class Data 
{ 
    public int LandId{get;set;} 
    public string Type{get;set;} 
    public int Total{get;set;} 
    public int Studio{get;set;} 
    public int Bedroom1 {get;set;} 
    public int Bedroom2{get;set;} 
    public int BedroomAbc{get;set;} 
} 

Dann müssen Sie Ihre Daten auf Objekte aus dieser Dataclass konvertieren:

//Hint: You don't need to call Close() if you use a using-block. It does the same ;) 
//Hint2: One while is enough because Read() automatically goes to next result 
using (var rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) 
{ 
    while (rdr.Read()) 
    { 
    //Here we create a new object 
    var data = new Data(); 

    //Here we fill the object 
    data.LandId = rdr.GetInt(0); 
    data.Type = rdr.GetString(1); 
    data.Total = rdr.GetInt(2); 
    data.Studio = rdr.GetInt(3); 
    data.Bedroom1 = rdr.GetInt(4); 
    data.Bedroom2 = rdr.GetInt(5); 
    data.BedroomAbc = rdr.GetInt(6); 

    list.Add(data); 
    } 
} 

Stellen Sie sicher, Ihre Methode nicht zurück List<string> länger, müssen Sie Rückgabe List<Data> stattdessen.

Sie können diese Daten zugreifen über:

List<Data> mydata = GetAllFlatType(5); 
int dummy = mydata[0].LandId; 

//OR 
var data = mydata.Find(d => d.LandId == 5); //Find the object with LandId == 5 
int dummy = data.Total; 

Wenn Sie die Liste als Datasource von Gridview setzen diese automatisch wie ein Zauber funktioniert :)

+0

danke! Ich mag das! aber wie kann ich in MVC View anzeigen? – Chuck

0

Sie können die Namen aus dem Reader bekommen

for (var i = 0; i < rdr.FieldCount; i++) 
    rows[i] = rdr[i] == DBNull.Value ? string.Empty : $"{rdr.GetName(i)}:{rdr[i].ToString()}"; 
+0

danke! Ich mag das! aber wie kann ich in MVC View anzeigen? – Chuck

Verwandte Themen