Формат таблицы для вывода текста в C # - PullRequest
0 голосов
/ 25 сентября 2018

У меня запрос к базе данных SQL в C #.Из этого запроса я получаю список вроде:

List<List<string>>()

этот список может быть изменен на любой другой тип таблицы, если требуется ..

В Microsoft Server Management Studio он выглядит следующим образом:

enter image description here

В Microsoft SQL Server Management Studio вы можете просто вывести результат в виде текста, который выглядит следующим образом:

enter image description here

Теперь, когда я автоматизирую некоторые задачи, я буду использовать C #, а не вручную, используя MSSQL.Из-за среды GXP важно, чтобы каждый элемент данных в базе данных документировался отдельно с текстовым отчетом, прикрепленным к «тикету».

На данный момент мой запрос с генерацией табличного текста выглядит следующим образом:

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;
 }

Результат:

enter image description here

, хотя это технически работает и также будет принято, лично я очень недоволен этим уродливым решением.Например, со строками разной длины формат больше не будет соответствовать.Знаете ли вы более чистое решение?

1 Ответ

0 голосов
/ 25 сентября 2018

Форматирование составной строки предоставляет компонент aligment, который можно использовать для указания размера поля и выравнивания значений по левому или правому краю.Например,

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));

Заголовок может быть написан с использованием того же шаблона:

var header=String.Format(linePattern,"Before","CPPS_Site","Study_ID","CustNo","CPPS_Job");

Запись заголовка и строки в консоль будет выглядеть следующим образом:

|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     |
...