i have this code that im getting error and, and cant understand why im getting the error. the code is as following: im using two arrays a string and a double(data values with their corresponding tinestamp). But for some reason im getting error that: index out of bounds error on this line:
getSelectedItemsObj.arrayOfTimeStamp = GetItemData(parameterName[counter], fromTime, toTime).arrayOfTimeStamp;
If i remove this line and only use arrayOfValue the code works fine, but i need both
.......... Thanks for the fast replies, here is how GetItemData is set up
public CustomDataType GetItemData(string parameterName, string fromTime, string toTime)
{
getWeatherItemObj = new CustomDataType();
// get the parameter ID
prameterID = GetParameterInfo(parameterName).ParameterID;
//get the nr of items to size value arrays
tableSize = GetTableSize(parameterName, fromTime, toTime, prameterID);
getWeatherItemObj.arrayOfValue = new double[tableSize];
getWeatherItemObj.arrayOfTimeStamp = new string[tableSize];
counter = 0;
try
{
using (conn = new SqlConnection(connectionString))// create and open a connection object
{
// 1. create a command object identifying the stored procedure
cmd = new SqlCommand("GetItemData", 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("@ParameterName", 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())
{
getWeatherItemObj.arrayOfValue[counter] = (double)reader["MeasurementValue"];
getWeatherItemObj.arrayOfTimeStamp[counter] = reader["MeasurementDateTime"].ToString();
counter++;
}
}
//close connection
reader.Close();
}
}
catch (SqlException e)
{
Console.WriteLine("Connection failed");
Console.WriteLine(e.Message);
Thread.Sleep(5000);
}
return getWeatherItemObj;
}
class CustomDataType
{
public double[] arrayOfValue;
public string[] arrayOfTimeStamp;
}
public CustomDataType GetSelectedtemsData(string[] parameterName, string fromTime, string toTime)
{
numberOfParameters = parameterName.Length;//Get the number of given parameters
tableSize = 0;
for (counter = 0; counter < numberOfParameters; counter++)
{
tableSize = tableSize + GetItemData(parameterName[counter], fromTime, toTime).arrayOfTimeStamp.Length;
}
getSelectedItemsObj = new CustomDataType();
getSelectedItemsObj.arrayOfValue = new double[tableSize];
getSelectedItemsObj.arrayOfTimeStamp = new string[tableSize];
for (counter = 0; counter < tableSize; counter++)
{
getSelectedItemsObj.arrayOfValue = GetItemData(parameterName[counter], fromTime, toTime).arrayOfValue;
getSelectedItemsObj.arrayOfTimeStamp = GetItemData(parameterName[counter], fromTime, toTime).arrayOfTimeStamp;
}
return getSelectedItemsObj;
}
counter> Length ofparameterName? Do you honestly think it is possible to debug a problem when you don't even show where data comes from (such asparameterName) or what most of your code is even doing (i.e.,GetItemData)?arrayOfTimeStamp).counterup totableSize, which does not look like it will be anything based on the number or parameters.