C# .net 核心如何使用 npgsql 检索所有行
C# .net core how can I retrieve all rows using npgsql
我正在使用 Npgsql 测试新的 .net Core RC2,因为我有一个 postgres 数据库。我对这一切都不熟悉,但我想做的是从数据库中检索 5 条记录,然后 return 以 Json 格式返回。但是,即使我可以看到所有 5 条记录都被 returned,我也只能输出 1 条记录。我在这里错过了什么..
public JsonResult About()
{
using (NpgsqlConnection conn = new NpgsqlConnection("myconnection"))
{
conn.Open();
string city="";
string state= "";
NpgsqlCommand cmd = new NpgsqlCommand("select city,state from streams limit 5", conn);
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
city = reader.GetString(reader.GetOrdinal("city"));
state = reader.GetString(reader.GetOrdinal("state"));
}
}
return Json(city);
}
}
我猜测 Json 对象中的城市 returned 的值只包含查询中的最后一个城市和州 returned。 while 循环每次迭代都会覆盖 city 变量。
将每个城市和州存储在一个数组中将允许您 return 所有 5 个城市。
代码更新
string city="";
string state= "";
NpgsqlCommand cmd = new NpgsqlCommand("select city,state from streams limit 5", conn);
var cities = new string[5]();
using (var reader = cmd.ExecuteReader())
{
var i = 0;
while (reader.Read())
{
city = reader.GetString(reader.GetOrdinal("city"));
state = reader.GetString(reader.GetOrdinal("state"));
cities[i++] = city;
}
}
// Aggregate into one string
var citiesString = String.Join(", ", cities);
return Json(citiesString);
数组return
另一方面,您可以 return 数组,它将使用 json.
序列化为 javascript 数组
string city="";
string state= "";
NpgsqlCommand cmd = new NpgsqlCommand("select city,state from streams limit 5", conn);
var cities = new string[5]();
using (var reader = cmd.ExecuteReader())
{
var i = 0;
while (reader.Read())
{
city = reader.GetString(reader.GetOrdinal("city"));
state = reader.GetString(reader.GetOrdinal("state"));
cities[i++] = city;
}
}
return Json(cities);
我建议使用 Entity Framework,并将模型序列化为 json。检查 Npgsql.EntityFrameworkCore.PostgreSQL -Pre nuget 包。
我正在使用 Npgsql 测试新的 .net Core RC2,因为我有一个 postgres 数据库。我对这一切都不熟悉,但我想做的是从数据库中检索 5 条记录,然后 return 以 Json 格式返回。但是,即使我可以看到所有 5 条记录都被 returned,我也只能输出 1 条记录。我在这里错过了什么..
public JsonResult About()
{
using (NpgsqlConnection conn = new NpgsqlConnection("myconnection"))
{
conn.Open();
string city="";
string state= "";
NpgsqlCommand cmd = new NpgsqlCommand("select city,state from streams limit 5", conn);
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
city = reader.GetString(reader.GetOrdinal("city"));
state = reader.GetString(reader.GetOrdinal("state"));
}
}
return Json(city);
}
}
我猜测 Json 对象中的城市 returned 的值只包含查询中的最后一个城市和州 returned。 while 循环每次迭代都会覆盖 city 变量。
将每个城市和州存储在一个数组中将允许您 return 所有 5 个城市。
代码更新
string city="";
string state= "";
NpgsqlCommand cmd = new NpgsqlCommand("select city,state from streams limit 5", conn);
var cities = new string[5]();
using (var reader = cmd.ExecuteReader())
{
var i = 0;
while (reader.Read())
{
city = reader.GetString(reader.GetOrdinal("city"));
state = reader.GetString(reader.GetOrdinal("state"));
cities[i++] = city;
}
}
// Aggregate into one string
var citiesString = String.Join(", ", cities);
return Json(citiesString);
数组return
另一方面,您可以 return 数组,它将使用 json.
序列化为 javascript 数组string city="";
string state= "";
NpgsqlCommand cmd = new NpgsqlCommand("select city,state from streams limit 5", conn);
var cities = new string[5]();
using (var reader = cmd.ExecuteReader())
{
var i = 0;
while (reader.Read())
{
city = reader.GetString(reader.GetOrdinal("city"));
state = reader.GetString(reader.GetOrdinal("state"));
cities[i++] = city;
}
}
return Json(cities);
我建议使用 Entity Framework,并将模型序列化为 json。检查 Npgsql.EntityFrameworkCore.PostgreSQL -Pre nuget 包。