如何从SQL数据库查询结果构建锯齿数组?
解决方法
你之前的代码错在把整行数据拼成了单个字符串,没把每个字段值作为数组的独立元素。不用绕弯子,直接在读取数据库行的时候构建对应数组就行。
正确实现步骤
- 循环读取数据库结果集的每一行
- 对每行的每个字段,先判断是不是数据库里的缺失值(
DBNull),非空就把字段值加到临时列表里 - 把临时列表转成数组,添加到
List<string[]>中 - 最后直接把
List<string[]>转成你要的锯齿数组string[][]
代码示例
List<string[]> myList = new List<string[]>(); // 假设reader是你的SqlDataReader实例,已经执行过查询 while (reader.Read()) { List<string> currentRow = new List<string>(); // 遍历当前行的所有列 for (int columnIndex = 0; columnIndex < reader.FieldCount; columnIndex++) { // 先判断字段是否为DBNull,避免调用GetString时抛出异常 if (!reader.IsDBNull(columnIndex)) { currentRow.Add(reader.GetString(columnIndex)); } // 如果需要给缺失值留位置(用空字符串占位),取消下面的注释 // else // { // currentRow.Add(string.Empty); // } } // 将当前行的列值数组加入列表 myList.Add(currentRow.ToArray()); } // 直接把List转成目标锯齿数组 string[][] jaggedArray = myList.ToArray();
注意点
- 别直接用GetString判断null:数据库里的缺失值是
DBNull,不是普通的null,直接调用GetString会报错,必须先用IsDBNull检查。 - 缺失值处理可选:要是想让数组长度和数据库列数一致,就取消注释用空字符串占位;要是不需要,直接跳过空字段,数组长度会自动匹配实际有值的字段数量。
- List转锯齿数组很简单:
List<string[]>的ToArray()方法直接返回string[][],完全符合你要的格式。
内容的提问来源于stack exchange,提问作者Luci
相关产品推荐
相关产品推荐

