Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用DataReader与数据库的连接过多_C#_Odbc_Datareader_Timesten - Fatal编程技术网

C# 使用DataReader与数据库的连接过多

C# 使用DataReader与数据库的连接过多,c#,odbc,datareader,timesten,C#,Odbc,Datareader,Timesten,每次我从datareader的odbcconnection的响应中获得一个值时,我都会连接到数据库(如果我有一个返回9个字段的查询,我有9个到db的连接),我只想进行1个连接并检索所有信息。用datareader可以吗?我需要使用其他连接方式吗 致以最良好的祝愿 代码: 不,您需要另一种查询方式 不是每个字段一个查询,一次选择所有9个,然后立即关闭连接 这种方法的另一个问题是没有任何分层。我不喜欢把UI和数据库代码混在一起。没有抽象的方法。尝试使用StringBuilder并附加select查询

每次我从datareader的odbcconnection的响应中获得一个值时,我都会连接到数据库(如果我有一个返回9个字段的查询,我有9个到db的连接),我只想进行1个连接并检索所有信息。用datareader可以吗?我需要使用其他连接方式吗

致以最良好的祝愿

代码:


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

不是每个字段一个查询,
一次选择所有9个,然后立即关闭连接


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

尝试使用StringBuilder并附加select查询。循环浏览您的dbReader,并将其存储在我能想到的最好的列表中。我知道您需要一个包含9个不同查询的调用,但无论哪种方式,您的sql机器或程序机器都会有开销。

请显示一些代码!!一般来说,连接的数量应该尽可能少…你能粘贴你的代码吗?我们需要看到它的答案我这里没有用户界面代码。。。你在哪里看到的?问题是,这个方法getvalues,每次它得到一个值,就连接到数据库……当你说“field”时,我想是“textfield”。我的错误。我做了一个返回9个字段的查询。。但为了让每一个都连接到数据库。。这是我的问题..应该是一个连接,一个查询,关闭连接。如果您的解决方案是为每个字段建立连接,那么最好找到一个新字段。
    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);