在 C# 中,如何使用 Console.WriteLine 方法从我的 SqlCommand 写入所有列

In C#, how do I use Console.WriteLine method to write ALL columns from my SqlCommand

我是 C# 的新手,但已经设法拼凑了一个 SQLCommand 查询。但是,我终其一生都无法弄清楚如何让它显示所有列。下面的代码是我目前拥有的(它成功显示了前 5 列):

Console.WriteLine(String.Format("{0} \t | {1} \t | {2} \t | {3} \t| {4} \t",
    reader[0], reader[1], reader[2], reader[3], reader[4]));

显示所有列而不必像上面那样列出每一列的最简单方法是什么?另外,有没有办法专门命名我要显示的列?例如,下面成功地显示了 "company" 列,但我不知道如何具体地做多列。如果我想显示 "company" 和 "FiscalYear" 怎么办?:

Console.WriteLine(reader["Company"].ToString());

我对此进行了大约 2 小时的研究,但无法提出解决方案。非常感谢您的帮助!

尝试在循环中使用 SqlDataReader 的 FieldCount 属性,例如:

while (reader.Read())
    {
      for (int i=0; i < reader.FieldCount; i++)
      {
        Console.Write(reader[i] + ",");
      }
      Console.WriteLine();
    }

我知道这对您硬编码字段数的 string.Format() 语句没有帮助。此处并不是真的试图帮助您进行格式设置,只是为您提供有关如何访问所有列的提示。

您可以使用 StringBuilder 循环创建文本

var sb = new StringBuilder();
for (int i = 0; i < reader.FieldCount; i++) {
    sb.Append($"{reader[i]} \t |");
}
sb.Length -= 4; // Remove the last " \t |".
Console.WriteLine(sb);

sb.Append(something)s = s + something 更有效,因为字符串连接总是创建一个新的字符串对象,并在附加内容之前将旧字符串复制到新字符串。而 StringBuilder 与缓冲区一起工作,并且可以追加多次,直到缓冲区已满并且必须调整大小。

$ 代表字符串插值。这两行是等价的:

String.Format("{0}, {1}, {2}", a, b, c)
$"{a}, {b}, {c}"

如果您的 reader 变量是 SqlDataReader 的一个实例,您可以这样做:

void Main()
{
    SqlDataReader reader = getDataReader();   \Code that returns a data reader
    Console.WriteLine(createOutputString(reader));
}

private string createOutputString(SqlDataReader reader)
{
    //Create an array to hold all the values of the reader
    object[] values = new object[reader.FieldCount];

    //Fill the array with the values
    reader.GetValues(values);

    //Return a string with each value of the array separated by a delimiter
    return string.Join(" \t | ", values);
}