在 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);
}
我是 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);
}