使用数据库中的数字填充数组

时间:2014-10-08 20:34:52

标签: c# arrays

我正在尝试找出使用从数据库中提取的数值填充数组的最佳方法。这是我到目前为止设置的功能:

    protected int[] GetBoxes()
    {
        int[] boxes;
        string query = "SELECT DISTINCT Length FROM Products INNER JOIN Baird_Ground_Boxes_Products ON uidBox = ProductId";
        using (SqlConnection cn = new SqlConnection(AbleConnectionStr))
        {
            SqlCommand cmd = new SqlCommand(query, cn);
            cmd.CommandType = CommandType.Text;
            cn.Open();
            using (IDataReader reader = cmd.ExecuteReader())
            {
                if (reader.Read())
                { 
                     if (reader["Length"].ToString() !="")
                     {
                          //populate array with the length values returned
                     }
                }                     
            }
        }
        return boxes;
    }

永远不会有一组值可以返回(可能是3,可能是2)。我对如何填充数组感到困惑,比如我把它变得太难或什么的。任何建议都会有所帮助!

2 个答案:

答案 0 :(得分:2)

您应填写List<T>并最终使用ToArray method来创建数组:

var lengths = new List<int>();
// ...

using (var reader = cmd.ExecuteReader())
while (reader.Read())
{
    if(!reader.IsDBNull(0)) 
        lengths.Add(reader.GetInt32(0));
}

return lengths.ToArray();

我还使用reader.IsDBNull代替reader["Length"].ToString() !=""来跳过null。您应该考虑使用null首先删除WHERE Length IS NOT NULL

答案 1 :(得分:2)

乍一看,您的查询可能会返回多行。

select distinct Length 
    from Products 
        join Baird_Ground_Boxes_Products 
            on  uidBox = ProductId

因此,您也可以使用while loop读出所有返回的行。

var lengths = new List<string>();

if (reader.HasRows)
    while (reader.Read()) lengths.Add(reader.GetString(0));

return lengths.ToArray();

我想知道你的字段Length是否真的是一个字符串。也许您应该考虑使用整数,因为长度通常表示为数字。如果是这样,请使用GetString方法来支持GetInt32,并更改您的列表类型。

var length = new List<int>();
lengths.Add(reader.GetInt32(0));