簡體   English   中英

只從列表executereader獲取單個值

[英]Only get single value from list executereader

我試圖從我的數據庫中讀取值。 但為什么我只獲得沒有列名的值? 這是我的控制器。 返回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"}]}

為什么它不是閱讀和打印狀態

字符串沒有屬性“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);

還有一個樣本(使用Dapper,您可以在NuGet上找到它)。 using 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);
}

因為你正在選擇州。 這將創建一個新對象,其中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以解決此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM