使用DataReader与db的连接太多

时间:2012-02-10 10:13:59

标签: c# odbc datareader timesten

每当我从datareader的odbcconnection的响应中获取值时,我建立了与数据库的连接(如果我有一个返回9个字段的查询,我有9个连接到db),我只想做1连接并检索所有信息。使用datareader可以吗?我需要使用其他连接方法吗?

最诚挚的问候。

代码:

    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 个答案:

答案 0 :(得分:1)

不,您需要另一种查询方式。

而不是每个字段一个查询,SELECT一次全部9,并立即关闭连接。

这种方法的另一个问题是没有任何分层。我不喜欢将UI和数据库代码混合在一起。你的方式没有抽象。

答案 1 :(得分:0)

尝试使用StringBuilder和AppendLine您的选择查询。循环遍历dbReader并存储在List中,这是我能想到的最好的。我确实理解你想要一个带有9个不同查询的调用,但无论哪种方式都会在你的sql机器或程序机器上产生开销。