我正在尝试找出使用从数据库中提取的数值填充数组的最佳方法。这是我到目前为止设置的功能:
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)。我对如何填充数组感到困惑,比如我把它变得太难或什么的。任何建议都会有所帮助!
答案 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));