2012-02-10 8 views
0

datareaderによるodbcconnectionからの応答から値を取得するたびに、データベースに接続しました(9個のフィールドを返すクエリがある場合、 、私は1つだけの接続を行い、すべての情報を取得したいと思います。それは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

いいえ、あなたが照会するための別の方法が必要です。

フィールドごとに1つのクエリの代わりに、SELECTすべてを一度に9回終了し、接続をすぐに終了します。

このアプローチのもう1つの問題は、レイヤリングがまったくないことです。私は、UIとデータベースコードを一緒に混ぜるのは嫌です。あなたのやり方は抽象的ではありません。

+0

私はここにUIコードを持っていません...どこでそれを見ましたか?問題は、そのメソッドのgetvaluesは、値を取得するたびにデータベースに接続したことです。 –

+0

「フィールド」と言ったとき、私は「テキストフィールド」と考えました。私の間違い。 – duffymo

+0

そして、私は9つのフィールドを返すクエリを行いますが、データベースに接続するそれぞれを取得する..それは私の問題です.. –

0

StringBuilderとAppendLineの選択クエリを使用してみてください。あなたのdbReaderをループして、リストに保存しておいたほうがいいと思います。私はあなたが9つの異なるクエリが1つの呼び出しをしたいが、いずれかの方法は、SQLマシンまたはプログラムのマシンにオーバーヘッドになることを理解しています。

+0

うまくいかなかった..それは私が選ぶ帰りのフィールドごとに1回行く。 –

関連する問題