2017-01-18 4 views
-2

C#을 사용하면 List<string>에 어떻게 추가 할 수 있습니까? 두 개의 별도 SQL 쿼리를 실행하고 두 결과를 내 List<string>에 저장하려고합니다. 첫 번째 쿼리는목록에 추가 <string>

빌 조

를 반환하고 두 번째 쿼리는

제임스와 찰스

하지만 내 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과 관련이 있습니다. 두 번째 동일한 데이터베이스에 연결하는 대신 Main 메서드에서 SQLConnection을 초기화하는 것이 좋습니다. 또한 일단 완료되면 SQLConnection을 처리해야합니다. https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.close(v=vs.110).aspx

것을 시도하고 그것이 작동하는지 확인 :

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

당신은 여기 MSDN에 훌륭한 전체 예제를 볼 수 있습니다 그런 일이 있는지 확인하는 가장 쉬운 방법은 지금처럼 using 성명에서 일을 래핑하는 것입니다 . 문제는 당신이 동일한 연결에서 connection.open을 두 번 시도하고 있다는 것입니다. 비록 내가 C#에서 SQL을 엉망으로 만든 이후 오해가 될 수 있습니다.

+0

연결에 문제가 있으면 열린 통화에서 예외가 표시됩니다. using 문에 대한 좋은 조언은 있지만 게시 된 코드에는 문제가 될 수 없습니다. – Steve

+0

그래, 오류가 발생하는지 확인하지 않았다. 그러나 일부 환경, 특히 웹 서버는 오류를 자동으로 표시하지 않는 경향이 있습니다. 따라서 Visual Studio를 통해 실행중인 경우 열린 선언문에 문제가 있는지 이미 알 수 있습니다. 그렇지 않으면 코드가 두 번째 호출을 지나가고 있는지 확인하기 위해 무언가를해야합니다. – ashbygeek