【问题标题】:C# - store data from database in 2 column listC# - 将数据库中的数据存储在 2 列列表中
【发布时间】:2014-06-27 14:59:13
【问题描述】:
    public static List<string>[] ColumnToList2(string table, List<string>[]data, NpgsqlConnection ncon)
    {
        using (ncon)
        {
            NpgsqlDataAdapter da = new NpgsqlDataAdapter("SELECT id, name FROM " + table + "", ncon);
            DataSet ds = new DataSet();
            da.Fill(ds, "" + table + "");
            foreach (DataRow row in ds.Tables["" + table + ""].Rows)
            {
                //Testing area
                //Console.WriteLine(row["id"].ToString());
                //Console.WriteLine(row["name"].ToString());

                data[0].Add(row[0].ToString());
                data[1].Add(row[1].ToString());                    
            }
        }
        return data;
    }

你好!这次我想询问从值中搜索 id 的建议,然后将两列存储在列表数组中。 当我在控制台中测试输入时,有我想要的,但是当尝试在列表中输入后查看时,没有我想要的结果(id 名称 - 列表) 这里是变量的定义:

        List<string>[] data_array = new List<string>[];
        datu_array[0]=new List<string>();
        datu_array[1]=new List<string>();

当我尝试通过控制台查看输出时,出现错误 - 我没有定义数组大小

希望你能帮我解决这个问题,在此先感谢。

【问题讨论】:

  • 这是什么:"" + table + ""table 已经是 string
  • 为什么不直接返回 DataTable 而无需所有这些编码? DataTable 已经包含您的数据,可以像数组一样寻址,但有很多优点。
  • 也就是说,我可以使用Datatable,从中提取信息?
  • 你真的想要List&lt;string&gt;[] 而不是List&lt;string[]&gt;
  • @Tim Schmelter 有区别吗?我刚刚浏览了很多 stackowerflow 材料,只有一个链接:link,但我需要 2 个值,id 和它的名称。因为当我在组合框中选择名称时,我会得到它的 ID,用于在数据库中输入。

标签: c# string list npgsql


【解决方案1】:

数组在实例化时需要指定大小:

List<string>[] data_array = new List<string>[2];

【讨论】:

  • 谢谢。我不确定这是否正确,但是当我尝试长度为 2 时,当我使用 foreach 查看数组时,它仅显示 2 条记录。
【解决方案2】:

我假设您实际上想要List&lt;string[]&gt; 而不是List&lt;string&gt;[]。所以一个列表,每一行都有一个string[],所有列都是字符串。

你可以使用 LINQ:

List<string[]> data = ds.Tables[0].AsEnumerable()
 .Select(row => row.ItemArray
    .Select(col => col.ToString())
    .ToArray())
 .ToList();

但是你为什么不继续使用DataTable,它比列表有一些优势,例如你可以通过序数索引或名称访问的列。

【讨论】:

  • 所以,数据库中的每条记录都存储为string[],这意味着id和它的名字在一行或coulmn name所有记录在一个字符串上,所有ids在另一个?
  • 每一行都包含表的所有字段/列,因此在您的情况下是列IdName。您可以通过索引或名称访问它们。所以如果你想要第一行的id和名字:ds.Tables[0].Rows[0].Field&lt;string&gt;("Name")或者ds.Tables[0].Rows[0].Field&lt;int&gt;("Id")
  • 再次感谢!我也可以将它们分配给变量?
【解决方案3】:

根据我从您的问题中了解到的情况,我建议您使用字典而不是字符串数组列表。

【讨论】:

  • 我只需要这个,用于数据库中的输入表单,我有 2 个组合框,我在其中选择输入值,但从数据库方面,我需要的不是值,而是它们的 ID。
  • 从您的问题来看,听起来您只需要存储一个引用值的键,这就是字典的设计目的。也许我弄错了,但无论如何这里是文档msdn.microsoft.com/en-us/library/xfhwa508(v=vs.110).aspx
猜你喜欢
  • 2016-11-27
  • 2011-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多