2017-10-26 27 views
2

からすべての列を記述することConsole.WriteLineをメソッドを使用してくださいどのように私はC#に新しいですが、一緒にSqlCommandオブジェクトのクエリをピースに管理しています。しかし、私は私の人生では、すべての列を表示する方法を理解することはできません。以下のコードは、私は(それが成功した最初の5列を示して)、現在持っているものです。は、私は私のSqlCommandオブジェクト

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

私は上記のようにやった一つ一つのリストを表示することなく、すべての列を表示する最も簡単な方法は何ですか?また、表示したい列に具体的に名前を付ける方法はありますか?たとえば、以下は「会社」列を正常に示していますが、複数の列を具体的に行う方法を理解することはできません。私は「会社」と「FiscalYear」?:

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

を表示したい場合、私は約2時間のためにこれを研究したが解決策を考え出すことができませんでした。ご助力ありがとうございます!

+0

'' SqlDataReader'のインスタンスをreader'ていますか? –

+0

はい。申し訳ありません。 (SqlDataReader reader = command.ExecuteReader()) –

答えて

1

あなたは、

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を使用することができます何か。 StringBuilderはバッファと共に動作し、バッファがいっぱいになるまで数回追加することができ、サイズを変更する必要があります。

$は文字列の補間を表します。これらの2行は等価です:

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

を使用して、以下のコードに会社と会計年度の列が表示されない理由を説明できますか? Console.WriteLine(reader ["Company"]、リーダー["FiscalYear"]);会社名がLWRVで、年が2017の場合、出力はLWRV 2017 –

+0

のように見えます。最初のパラメータは書式文字列であり、次の引数は引数であると考えられます。 'String.Format'と同じ働きをします。あなたは 'Console.WriteLine(" {0} {1} "、読者[" Company "]、読者[" FiscalYear "]);'と書くことができます。言い換えれば、あなたの質問のコードでは、 'Console.WriteLine'の中に' Format.String'呼び出しをドロップすることができます: 'Console.WriteLine(" {0} \ t | {1} \ t | {2 } \ T | {3} \ T | {4} \ T」、 リーダ[0]、リーダ[1]、リーダ[2]、リーダ[3]、リーダ[4]); ' –

+0

これはまさにあります必要だった。私にメリークリスマス。ありがとう、兄弟。 –

0

のように、ループ内でSqlDataReaderののFieldCountプロパティを使用してみてください:私はこれがあなたのString.Formatの()を使用すると、ハードコードされたフィールドの数を持っているの文のお手伝いをしていません知っている

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

。実際にここで書式を設定するのを手伝ってくれるわけではなく、すべての列にアクセスする方法のヒントを提供するだけです。文字列の連結は常に新しい文字列オブジェクトを作成し、追加する前に新しいものに古い文字列をコピーするので

1

あなた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); 
} 
関連する問題