2012-02-10 5 views
0

datareader에 의한 odbcconnection의 응답에서 값을 얻을 때마다 데이터베이스에 연결했습니다 (9 개의 필드를 반환하는 쿼리가 있으면 db에 9 개의 연결이 있음) , 나는 단 하나의 연결을하고 모든 정보를 검색하고 싶다. datareader로 가능합니까? 다른 연결 방법을 사용해야합니까?DataReader를 사용하는 db에 너무 많은 연결

좋습니다.

코드 :

string strSql = "SELECT G.COMPANY_ID, U.USER_ID, U.GROUP_ID, U.NAME, U.DISPLAY_NAME, U.EMAIL, U.IS_CORPORATE, U.CALL_PARK, U.CALL_PICKUP, U.PCHUNTING, U.OUT_OF_OFFICE, U.DND, U.HOTLINE, U.PIN, U.FORCE_PIN_CHECKED, U.PCHUNTING_TYPE, U.DND_END_TIMESTAMP, U.DND_CONTACT, U.OUT_OF_OFFICE_TYPE, U.LANGUAGE, U.AVAILABLE_TIMESTAMP, U.LAST_DIALLED_NUMBER, U.LAST_INCOMING_CALL, U.LAST_MISSED_CALL, U.CALL_PICKUP_GROUP_ID, U.HOTLINE_NUMBER, U.PORTAL_PASSWORD, U.PROFILE, U.MAIN_NUMBER, U.DUAL_OUTGOING_CTRANSFER, U.MY_CALL_PICKUP, U.VM_RECONNECT_NOTIFY, U.SPARE_STRING1, U.INSERT_DATE, U.INSERT_USER, U.UPDATE_DATE, U.UPDATE_USER " + 
          "FROM {0}_TT_USER U LEFT OUTER JOIN {0}_TT_GROUP G ON U.GROUP_ID = G.GROUP_ID " + 
          "WHERE USER_ID = :USER_ID "; 

      conn = new OdbcConnection(GetIpCntrxTimestenConnString(opCode)); 
      cmd = new OdbcCommand(
       string.Format(strSql 
          , config.GetIpCntrxEsmViewName(opCode)) 
       , conn); 

      cmd.Parameters.AddWithValue(":USER_ID", user_id); 

      cmd.CommandType = CommandType.Text; 
      conn.Open(); 

      dataReader = cmd.ExecuteReader(); 

      object[] meta = new object[dataReader.FieldCount]; 

      int NumberOfColums = dataReader.GetValues(meta); 
+2

일부 코드를 보여주세요! 일반적으로 연결 수를 최대한 낮게 유지해야합니다 ... –

+1

코드를 붙여 넣으시겠습니까? 우리는 대답하기 위해 그것을 볼 필요가있다 – AnarchistGeek

답변

1

아니, 당신은 조회하는 또 다른 방법이 필요합니다.

필드 당 하나의 쿼리 대신 SELECT 모두 9 번에 한 번에 연결을 닫습니다.

이 접근법의 또 다른 문제점은 레이어링이 전혀 없다는 것입니다. 나는 UI와 데이터베이스 코드를 섞어 놓는 것을 좋아하지 않을 것이다. 당신의 추상화가 없습니다.

+0

나는 여기 UI 코드가 없다 ... 어디서 그걸 보았 니? 문제는 그 getvalues ​​메소드가 값을 얻을 때마다 데이터베이스에 연결을 만든다는 것입니다 ... –

+0

"필드"라고 말했을 때 "텍스트 필드"라고 생각했습니다. 내 실수. – duffymo

+0

그리고 9 개의 필드를 반환하는 쿼리를 수행합니다 ..하지만 데이터베이스에 연결되는 각각을 얻으려면 내 문제입니다 .. –

0

StringBuilder 및 AppendLine을 사용하여 선택 쿼리를 사용해보십시오. Loop를 통해 dbReader를 저장하고 Lists에 저장하는 것이 가장 좋습니다. 나는 당신이 9 가지의 다른 쿼리를 가지고 하나의 호출을 원한다는 것을 이해하지만, SQL 머신이나 프로그램 머신에 오버 헤드가 생길 수도있다.

+0

작동하지 않았습니다 .. 내가 선택한 각 반환 필드에 의해 1 번 간다 .. –