在 C# 中格式化 table 为文本输出
Format table to text output in C#
我有一个针对 C# 中的 SQL 数据库的查询。从这个查询中我得到一个列表,如:
List<List<string>>()
如果需要,可以将此列表更改为任何其他 table 类型..
在 Microsoft Server Management Studio 中,它看起来像这样:
在 Microsoft SQL Server Management Studio 中,您可以简单地将结果输出为文本,如下所示:
现在,当我自动执行一些任务时,我将使用 C# 而不是手动使用 MSSQL。由于 GXP 环境,重要的是在数据库中单独记录每个数据更改,并在 "ticket".
上附上文本报告。
现在我使用 Table 文本生成的查询如下所示:
SqlCommand command = new SqlCommand("SELECT '" + description + "' AS '" + description + "', CPPS_Site,Study_Id,CustNo,CPPS_Job FROM CDS.dbo.Studies " +
"WHERE Study_Id = " + studyID, con);
List<string> overview = new List<string>();
overview.Add("|=========================================================|");
overview.Add("|"+description + "\t|CPPS_Site\t|Study_ID\t|CustNo\t|CPPS_Job|");
overview.Add("|---------------------------------------------------------|");
using (SqlDataReader resultQuery = command.ExecuteReader())
{
var schemaTable = resultQuery.GetSchemaTable();
while (resultQuery.Read())
{
string build = "|";
build += resultQuery.GetSqlValue(0) + "\t|"
+ resultQuery.GetSqlValue(1) + "\t\t|"
+ resultQuery.GetSqlValue(2) + "\t\t|"
+ resultQuery.GetSqlValue(3) + "\t|"
+ resultQuery.GetSqlValue(4);
build += "|";
overview.Add(build);
}
overview.Add("|=========================================================|");
return overview;
}
结果:
虽然这在技术上可行并且也会被接受,但我个人对这个丑陋的解决方案非常不满意。例如,对于不同长度的字符串,格式将不再适合。你知道更干净的解决方案吗?
Composite string formatting 提供了一个对齐组件,可用于指定字段大小和左对齐或右对齐值。例如
String.Format("|{0,5}",5);
会产生
| 5|
每行可以写成:
var linePattern="|{0,-7}|{1,-17}|{2,-11}|{3,-14}|{4,-8}|";
var line= String.Format(linePattern
resultQuery.GetSqlValue(0),
resultQuery.GetSqlValue(1),
resultQuery.GetSqlValue(2),
resultQuery.GetSqlValue(3),
resultQuery.GetSqlValue(4));
header 可以使用相同的模式编写:
var header=String.Format(linePattern,"Before","CPPS_Site","Study_ID","CustNo","CPPS_Job");
将 header 和行写入控制台将如下所示:
|Before |CPPS_Site |Study_ID |CustNo |CPPS_Job|
|Before |1 |2 |C50030 |999 |
如果字符串大于字段值,则它们不会被截断并且格式会显示为损坏,例如:
|Before |CPPS_Site |Study_ID |CustNo |CPPS_Job|
|Before123 |1 |2 |C50030 |999 |
我有一个针对 C# 中的 SQL 数据库的查询。从这个查询中我得到一个列表,如:
List<List<string>>()
如果需要,可以将此列表更改为任何其他 table 类型..
在 Microsoft Server Management Studio 中,它看起来像这样:
在 Microsoft SQL Server Management Studio 中,您可以简单地将结果输出为文本,如下所示:
现在,当我自动执行一些任务时,我将使用 C# 而不是手动使用 MSSQL。由于 GXP 环境,重要的是在数据库中单独记录每个数据更改,并在 "ticket".
上附上文本报告。现在我使用 Table 文本生成的查询如下所示:
SqlCommand command = new SqlCommand("SELECT '" + description + "' AS '" + description + "', CPPS_Site,Study_Id,CustNo,CPPS_Job FROM CDS.dbo.Studies " +
"WHERE Study_Id = " + studyID, con);
List<string> overview = new List<string>();
overview.Add("|=========================================================|");
overview.Add("|"+description + "\t|CPPS_Site\t|Study_ID\t|CustNo\t|CPPS_Job|");
overview.Add("|---------------------------------------------------------|");
using (SqlDataReader resultQuery = command.ExecuteReader())
{
var schemaTable = resultQuery.GetSchemaTable();
while (resultQuery.Read())
{
string build = "|";
build += resultQuery.GetSqlValue(0) + "\t|"
+ resultQuery.GetSqlValue(1) + "\t\t|"
+ resultQuery.GetSqlValue(2) + "\t\t|"
+ resultQuery.GetSqlValue(3) + "\t|"
+ resultQuery.GetSqlValue(4);
build += "|";
overview.Add(build);
}
overview.Add("|=========================================================|");
return overview;
}
结果:
虽然这在技术上可行并且也会被接受,但我个人对这个丑陋的解决方案非常不满意。例如,对于不同长度的字符串,格式将不再适合。你知道更干净的解决方案吗?
Composite string formatting 提供了一个对齐组件,可用于指定字段大小和左对齐或右对齐值。例如
String.Format("|{0,5}",5);
会产生
| 5|
每行可以写成:
var linePattern="|{0,-7}|{1,-17}|{2,-11}|{3,-14}|{4,-8}|";
var line= String.Format(linePattern
resultQuery.GetSqlValue(0),
resultQuery.GetSqlValue(1),
resultQuery.GetSqlValue(2),
resultQuery.GetSqlValue(3),
resultQuery.GetSqlValue(4));
header 可以使用相同的模式编写:
var header=String.Format(linePattern,"Before","CPPS_Site","Study_ID","CustNo","CPPS_Job");
将 header 和行写入控制台将如下所示:
|Before |CPPS_Site |Study_ID |CustNo |CPPS_Job|
|Before |1 |2 |C50030 |999 |
如果字符串大于字段值,则它们不会被截断并且格式会显示为损坏,例如:
|Before |CPPS_Site |Study_ID |CustNo |CPPS_Job|
|Before123 |1 |2 |C50030 |999 |