【发布时间】:2020-12-17 15:28:54
【问题描述】:
我已经从 postgres 调用了函数,输出就像
我使用 windows 窗体显示数据,我使用 npgsql 连接 c# 和 postgres d.b。 我的 BL 类函数如下所示
public List<User> view_data()
{
NpgsqlDataReader rdr;
List<User> lstUser = new List<User>();
if (con.State == ConnectionState.Closed)
{
con.Open();
}
NpgsqlCommand command = new NpgsqlCommand("select * from public.get_user_details", con);
rdr = command.ExecuteReader();
while (rdr.Read())
{
lstUser.Add(new User()
{
id = rdr.GetInt16(Convert.ToString(rdr["id"])),
roleName = rdr.GetString(Convert.ToString(rdr["rolename"])),
firstName = rdr.GetString(rdr.GetOrdinal("firstname")),
lastName = rdr.GetString(rdr.GetOrdinal("lastname"))
});
}
rdr.Close();
return lstUser;
}
在角色名上出现错误。错误是无法将字符串转换为字符串[]
下面给出了我的用户类
public class User
{
public int id
{ get; set; }
public string firstName
{ get; set; }
public string lastName
{ get; set; }
public string email
{ get; set; }
public string userName
{ get; set; }
public string[] roleName
{ get; set; }
}
我的问题是如何使用 npqsql 数据阅读器在 c# 中分配文本数组数据?
在这个区域出错 => roleName = rdr.GetString(Convert.ToString(rdr["rolename"]))
postgres 给出角色名称输出是文本数组。 IE;在一列中包含多个值。 IE; {管理员,用户}。所以需要使用数据阅读器将postgres文本数组设置成c#格式。
【问题讨论】:
-
你需要把
public string[] roleName { get; set; }改成public string roleName { get; set; } -
如你所说,我已将 roleName[] 更改为 roleName,但出现错误 => IndexOutOfRangeException: Field not found in row: System.String[]
-
postgres 给出角色名称输出是文本数组。 IE;在一列中包含多个值。 IE; {管理员,用户}。因此需要使用数据阅读器将文本数组设置为 c# 格式。你能帮我解决这个问题吗?
-
我很熟悉 1. C# 中的直接 SQL 访问(我建议使用类似实体框架的 ORM)和 2. Postgres。但根据我的 SQL 经验,一个单元格中的多个值会破坏第一个范式,而应将其替换为与“角色”表的关系
标签: c# postgresql ado.net