将多个列值从SqlReader复制到数组?

时间:2018-09-04 13:13:55

标签: c# sql

如何生成包含所有列信息的字符串数组。 该查询将返回包含多列的单行

var rowLines = new List<string>();

        try
        {
            using (SqlConnection connection = new SqlConnection(GetConnectionString()))
            {
                string query = "SELECT I1,I2,I3,I4,I5,I6,I7,I8,I9,I10,I11,I12,I13,I14,I15 FROM LABEL_OUT WHERE LABEL_NAME='" + labelName + "'";
                using (SqlCommand command = new SqlCommand(query, connection))
                {
                    connection.Open();

                    using (SqlDataReader reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            rowLines.Add(reader[0].ToString());
                        }

                    }
                }
            }

        }
        catch (Exception ex)
        {
            System.Windows.MessageBox.Show(ex.Message);
        }

此处rowLines将包含所有列值,例如I1,I2,..... I15

2 个答案:

答案 0 :(得分:5)

可能最简单的方法是使用DbDataReader.GetValues(object[]),它使用来自每一列的值填充一个预先存在的数组:

var vals = new object[reader.FieldCount];
while (reader.Read())
{
    reader.GetValues(vals);
    // ... do something with the values
}

答案 1 :(得分:2)

如果您确定只行一行,则可以使用readerFieldCount上循环,然后将每个元素添加到List<string>上。最后,您可以将其返回为array

var rowLines = new List<string>();

if (reader.Read())
{
   for (int i = 0; i < reader.FieldCount; i++)
   {
      rowLines.Add(reader.IsDBNull(i) ? string.Empty : reader[i].ToString());
   }
}

return rowLines.ToArray();