2

データベースから値を読み取ろうとしています。しかし、なぜ列名のない値のみを取得するのですか?これは私のコントローラーです。JSONで値を返します

            SqlCommand cmd = con.CreateCommand();

            cmd.CommandText = "SELECT DISTINCT State FROM MyDBtable";

            con.Open();
            List<string> StateList = new List<string>();
            SqlDataReader reader = cmd.ExecuteReader();

            while (reader.Read())
            {
                StateList.Add(reader[0].ToString());
            }

            return Json(new
            {
                myTable = StateList
            }, JsonRequestBehavior.AllowGet);

これは私のJSONです

{"myTable":["VA","CA"]}

ところが、それは私に与えることを想定しています

{"myTable":[{"State":"VA"},{"State":"CA"}]}

状態の読み取りと印刷が行われないのはなぜですか

4

2 に答える 2

4

文字列にはプロパティ「State」がありません。代わりに匿名タイプを作成します。

myTable = StateList.Select(s => new { State = s })

更新:複数の列の最も簡単なソリューション-そのためのDTOを作成します

public class MyItem // of course use more descriptive name
{
   public string State { get; set; }
   public string Capital { get; set; }
   // etc
}

そして、読者からそれを記入してください:

List<MyItem> items = new List<MyItem>();

while (reader.Read())
{
    MyItem item = new MyItem();
    item.State = reader[0].ToString(); 
    item.Capital = reader[1].ToString(); 
    // etc
    items.Add(item);
}

return Json(new {  myTable = items }, JsonRequestBehavior.AllowGet);

もう1つのサンプル(NuGetで見つけることができるDapperを使用)。コードに追加using Dapper;します。上記と同じDTOクラスを使用します。

using (var connection = new SqlConnection(connectionString))
{
    connection.Open();
    return Json(new {
       myTable = connection.Query<MyItem>("SELECT * FROM MyDBtable").ToList()
    }, JsonRequestBehavior.AllowGet);
}
于 2012-11-15T19:21:56.333 に答える
3

状態を選択しているからです。これにより、プロパティに状態が割り当てられた新しいオブジェクトが作成Stateされ、必要なものが得られます。

SqlCommand cmd = con.CreateCommand();

cmd.CommandText = "SELECT DISTINCT State FROM MyDBtable";

con.Open();
List<string> StateList = new List<string>();
SqlDataReader reader = cmd.ExecuteReader();

while (reader.Read())
{
    StateList.Add(reader[0].ToString());
}

return Json(new
{
    myTable = StateList.Select(i => new { State = i })
}, JsonRequestBehavior.AllowGet);

追加の列については、これを解決するために変更されたlazyberezovsky の回答を参照してください。StateList

于 2012-11-15T19:21:38.610 に答える