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

本文关键字:填充 数组 数字 数据库 | 更新日期: 2023-09-27 18:26:07

我正试图找出用从数据库中提取的数值填充数组的最佳方法。这是我迄今为止设置的功能:

    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)。我对如何填充数组感到困惑,好像我让它变得太难了。任何建议都会很有帮助!

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

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

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));

您应该填充一个List<T>,最后使用它的ToArray方法来创建数组:

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 s。您应该首先考虑使用WHERE Length IS NOT NULL来删除null s。