2017-03-09 2 views
-1

SQL ServerからSPを使用してデータを取得するコードを記述します。しかし、私は変数やプロパティに格納する方法を知らない。 SQLスクリプトは、SQL ServerのPIVOT機能を使用して行を列に変換しています。リストから変数またはプロパティにデータを格納する方法<string[]>()?

サンプルコード:

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

データ:

{ 
    "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

SqlServerはこのデータを返していますか? JSON – lokusking

+0

をご覧ください。ありがとうございます。https://i.stack.imgur.com/aSdGK.png – Chuck

+0

@lokuskingどのようにSirにプロパティ名を追加しますか? – Chuck

答えて

0

私はあなたに以下の方法をお勧めします。そして、あなたがこのデータクラスからオブジェクトにデータを変換する必要があり

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

:あなたのデータ構造を表すクラスを作成します

//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); 
    } 
} 

は、あなたの方法はもはやList<string>を返さないことを確認し、必要に代わりにList<Data>を返してください。

あなたは経由して、このデータにアクセスすることができます:あなたはGridViewののデータソースとしてリストを設定した場合、これは自動的に魅力のように動作します

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; 

:)

+0

ありがとう!私はこれが好き! MVCビューではどのように表示できますか? – Chuck

0

あなたはリーダー

から名前を得ることができます
for (var i = 0; i < rdr.FieldCount; i++) 
    rows[i] = rdr[i] == DBNull.Value ? string.Empty : $"{rdr.GetName(i)}:{rdr[i].ToString()}"; 
+0

ありがとうございます!私はこれが好き! MVCビューではどのように表示できますか? – Chuck

関連する問題