2017-01-18 9 views
-2

C#を使用するList<string>にどのように追加できますか?私は2つの別々のSQLクエリを実行し、両方の結果を私のList<string>に保存したいと思っています。最初のクエリはリストに追加<string>

ビルとジョー

を返し、2番目のクエリは

ジェームズとチャールズ

しかし、私のConsole.WriteLine()のみ生産を返しBillJoe

これが発生するために私の構文で何が正しく設定されなかったのですか?

public static List<string> tempList = new List<string>(); 

static void Main(string[] args) 
{ 
    string qs = "Select Top 2 firstname from thistable"; 
    // 
    GetFirstSetOfData(qs); 

    string bc = "Select Top 2 firstname from thattable"; 
    // 
    GetFirstSetOfData(bc); 

    foreach (string tumble in tempList) 
    Console.WriteLine(tumble); 
} 

private static void GetFirstSetOfData(string query) 
{ 
    connection = new SqlConnection(ConnectionString); 
    { 
    cmd = new SqlCommand(queryString, connection); 
    connection.Open(); 
    reader = cmd.ExecuteReader(); 
    while (reader.Read()) 
     tempList.Add(reader.GetValue(0).ToString()); 
    reader.Close(); 
    } 
} 
+2

'GetFirstSetOfData'がtempListにアクセスできないため、これはコンパイルされません。実際のコードでは、 'tempList'はどのように定義されていますか? –

+0

申し訳ありませんが、クラス変数です。私はそれを本当に素早く修正しましょう。 –

+2

ありがとうございます。コードが立っているので、これはうまくいくはずです。 'tempList'は一度だけインスタンス化され、それが参照型なので、GetFirstSetOfDataの両方の呼び出しが同じリストインスタンスに追加されます。これは、 'thattable'が実際にあなたが思っている結果を返すと仮定しています。 'while(reader.Read()){var x = reader.GetValue(0).ToString();}を試すことができます。 Console.WriteLine(x); tempList.Add(x); } 'クエリが期待どおりのものであることを確認します。 –

答えて

0

おそらく、SQLConnectionと関係があると思います。 2回目に同じデータベースに接続するのではなく、MainメソッドでSQLConnectionを初期化する方がよいでしょう。また、SQLConnectionは、完了したら本当に処分する必要があります。それが起こることを確認する簡単な方法はこれのように、using声明の中で物事をラップすることです:

using (connection = new SQLConnection(connectionString)) 
{ 
    connection.Open(); 
    //do all your queries and things 
} 

あなたがここにMSDNに優れた完全な例を見ることができます:https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.close(v=vs.110).aspx

はそれを試してみて、それが動作するかどうかを確認します。私は、同じ接続でconnection.openを2回試しているという問題があると思います。私はC#でSQLを混乱させて以来、間違っている可能性があります。

+0

接続に問題がある場合は、[開く]コールで例外が表示されます。 usingステートメントについての良いアドバイスだが、これは投稿されたコードの問題ではない。 – Steve

+0

それがエラーを投げるかどうか確認してもらえませんでした。しかし、一部の環境、特にWebサーバーは、エラーを静かに抑制する傾向があります。もし彼がVisual Studioを走っているのであれば、それはすでにオープンステートメントに問題があるかどうかを知っているでしょう。さもなければ、彼はコードがその2回目の呼び出しを過ぎていることを確認するために何かをしなければなりません。 – ashbygeek

関連する問題