You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中如何从数据库读取数据并存入数组(解决DataRow取值问题)

把DataTable中的数据存入数组用于图表展示

嘿,我来帮你搞定这个问题!你现在拿到的System.Data.DataRow是整行的对象容器,要获取里面的实际字段值,得指定具体列名或者索引来提取。针对你的需求,这里有两种好理解的实现方法:

方法1:基础循环(新手友好,容易理解)

先创建一个和DataTable行数匹配的字符串数组,然后在循环里逐个提取name列的实际值:

public void getOutstanding() 
{
    SelectQueryBuilder sqbSelect;
    DataSet dsOutstanding;
    sqbSelect = new SelectQueryBuilder();
    sqbSelect.SelectColumns(new string[] { "name"});
    sqbSelect.SelectFromTable("user");
    sqbSelect.AddWhere("category", Comparison.Equals, "18");
    dsOutstanding = Conn.DataAdapter(CommandType.Text, sqbSelect.BuildQuery());
    sqbSelect = null;
    DataTable areaChart = dsOutstanding.Tables[0];
    
    // 创建对应长度的字符串数组
    string[] namesArray = new string[areaChart.Rows.Count];
    
    for( int a = 0; a < areaChart.Rows.Count; a++) 
    {
        // 提取"name"列的值,转成字符串存入数组
        namesArray[a] = areaChart.Rows[a]["name"].ToString();
    }
    
    // 现在namesArray里就是所有name列的实际值,直接拿去给图表用就行啦
}

简单解释:areaChart.Rows[a]拿到第a行的DataRow对象,["name"]指定要提取的列名,最后用ToString()把object类型的结果转成字符串(因为你的列是name,属于字符串类型)。如果是数值类型(比如int、decimal),可以用Convert.ToInt32(areaChart.Rows[a]["columnName"])这类转换方法。

方法2:用LINQ简化代码(更简洁)

如果你愿意尝试更简洁的写法,可以用LINQ一行搞定,不过要记得在文件顶部添加using System.Linq;引用:

// 在获取areaChart之后
string[] namesArray = areaChart.AsEnumerable()
                               .Select(row => row["name"].ToString())
                               .ToArray();

AsEnumerable()把DataTable转成可遍历的行集合,Select()提取每一行的name值,最后ToArray()直接转成数组,代码看起来清爽很多。

不管用哪种方法,最终得到的数组都可以直接传给图表组件使用啦!

内容的提问来源于stack exchange,提问作者user3431310

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:38:26