C#ADO网络代码中for循环的问题

C#ADO网络代码中for循环的问题,c#,asp.net,database,for-loop,ado.net,C#,Asp.net,Database,For Loop,Ado.net,我对这个代码有一些严重的问题。我有一个方法GetWeatherItemData,它接受一个参数名和一个句点作为从SQL数据库获取数据的输入,它似乎工作得很好 但是我想创建一个可以对多个参数执行相同工作的方法,因此我创建了一个名为GetSelectedWeatherItemsData的方法,该方法将一个参数数组作为输入,并循环使用我的第一个方法,但由于某些原因,它只返回一个参数的数据,即输入参数数组中的第一个参数 以下是第一种方法: public CustomDataType GetWeather

我对这个代码有一些严重的问题。我有一个方法
GetWeatherItemData
,它接受一个参数名和一个句点作为从SQL数据库获取数据的输入,它似乎工作得很好

但是我想创建一个可以对多个参数执行相同工作的方法,因此我创建了一个名为
GetSelectedWeatherItemsData
的方法,该方法将一个参数数组作为输入,并循环使用我的第一个方法,但由于某些原因,它只返回一个参数的数据,即输入参数数组中的第一个参数

以下是第一种方法:

public CustomDataType GetWeatherItemData(string parameterName, string fromTime, string toTime)
{
        /* This method takes parameter name, start time and end time as input it will then return 
         * all the measurement values and their timestamp as array for the specific parameter           
         */
        CustomDataType getWeatherItemObj = new CustomDataType();           
        List<double> valueList = new List<double>();
        List<string> timeStampList = new List<string>();
        List<int>   parameterIdList = new List<int>();
        List<string> ParameterNameList = new List<string>();

        try
        {
            using (conn = new SqlConnection(connectionString))// create and open a connection object
            {
                // 1. create a command object identifying the stored procedure
                 cmd = new SqlCommand("GetWeatherItemData", conn);

                // 2.Let the command object know we will execute a stored procedure
                cmd.CommandType = CommandType.StoredProcedure;

                // 3. add the 3 parameters to command, so the can be passed to the stored procedure                  
                cmd.Parameters.Add("@WeatherParameterName", SqlDbType.VarChar).Value    = parameterName;
                cmd.Parameters.Add("@FromTime", SqlDbType.VarChar).Value                = fromTime;
                cmd.Parameters.Add("@ToTime", SqlDbType.VarChar).Value                  = toTime;

                //open connection
                conn.Open();

                // execute the command
                reader = cmd.ExecuteReader();

                if (reader.HasRows)
                {
                    while (reader.Read())
                    {
                        valueList.Add((double)reader["MeasurementValue"]);
                        timeStampList.Add(reader["MeasurementDateTime"].ToString());
                        parameterIdList.Add((int)reader["WeatherParameterID"]);                            
                    }
                } 

                //close connection
                reader.Close();

                //changed to arrays to support webservices
                getWeatherItemObj.arrayOfValue          = valueList.ToArray();
                getWeatherItemObj.arrayOfTimestamp      = timeStampList.ToArray();
                getWeatherItemObj.arrayOfParameterID    = parameterIdList.ToArray();                    

                for (counter = 0; counter < getWeatherItemObj.arrayOfValue.Length; counter++)
                {
                    ParameterNameList.Add(GetParameterInfo(parameterName).ParameterName);
                }

                getWeatherItemObj.arrayOfParameterName = ParameterNameList.ToArray();
            }
        }
        catch (SqlException e)
        {
            Console.WriteLine("Connection failed");
            Console.WriteLine(e.Message);
            Thread.Sleep(5000);
        }           
        return getWeatherItemObj;
    }

似乎绝对错误的是,您在循环中调用了简单web服务四次——为什么不调用一次,然后使用返回的结果呢

比如:

for (counter = 0; counter < (parameterName.Length); counter++)
{
    tempObj = GetWeatherItemData(parameterName[counter], fromTime, toTime);

    valueList.AddRange(tempObj.arrayOfValue);
    timeStampList.AddRange(tempObj.arrayOfTimestamp);
    //paramIdStampList.AddRange(tempObj.arrayOfParameterID);
    ParameterNameList.AddRange(tempObj.arrayOfParameterName);
}
for(计数器=0;计数器<(parameterName.Length);计数器++)
{
tempObj=GetWeatherItemData(参数名称[计数器]、fromTime、toTime);
valueList.AddRange(temboj.arrayOfValue);
timeStampList.AddRange(tempObj.arrayOfTimestamp);
//paramIdStampList.AddRange(tempObj.arrayOfParameterID);
ParameterNameList.AddRange(tempObj.arrayOfParameterName);
}

您是否尝试调试此循环?应避免使用魔术字符串。是的,我通过设置参数名称[1]和其他元素编号来测试循环,它仅返回它们的数据。您不应该在循环体的2到5行中使用
tempObj
?或者多次对数据库执行一个相同的请求,您需要进行更多的调试:确保循环执行所需的次数;确保每次都将所需参数传递到
GetWeatherItemData
;确保
GetWeatherItemData
按需要执行,并将所需的数据放入返回对象中。我也尝试了这个方法,它也只获取第一个1的数据element@user1810659你能更详细地解释一下,你所说的获取第一个元素的数据是什么意思吗?
for (counter = 0; counter < (parameterName.Length); counter++)
{
    tempObj = GetWeatherItemData(parameterName[counter], fromTime, toTime);

    valueList.AddRange(tempObj.arrayOfValue);
    timeStampList.AddRange(tempObj.arrayOfTimestamp);
    //paramIdStampList.AddRange(tempObj.arrayOfParameterID);
    ParameterNameList.AddRange(tempObj.arrayOfParameterName);
}