仅从列表执行器中获取单个值



我正在尝试从数据库中读取值。但是为什么我只得到没有列名的值呢?这是我的控制器。返回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;添加到代码中。使用相同的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);

有关其他专栏,请参阅lazybrezovsky的答案,谁更改了StateList来解决这个问题。

相关内容

  • 没有找到相关文章

最新更新