0

我有一种方法可以查询数据库以获取 GUID 列表,然后将它们添加到数组中。我希望我的方法从数组中返回一个特定的 GUID(基于组合框选择索引)。以下尝试产生标题中的错误。

public string PopulateDivisions(string qs, string cs)
    {
        using (SqlConnection connection = new SqlConnection(cs))
        {
            connection.Open();

            SqlCommand command = new SqlCommand(qs, connection);
            SqlDataReader reader = command.ExecuteReader();
            while (reader.Read())
            {
                int ordinal = reader.GetOrdinal("Name");
                Div_Selecter.Items.Add(reader.GetString(ordinal));
                //Data_Result.Items.Add(reader.GetString(ordinal));
            }
            Div_Selecter.SelectedIndex = 1;
            while (reader.Read())
            {
                int ordinal2 = reader.GetOrdinal("Id");
                for (int i=0; i<=ordinal2; i++)
                {
                    string[] divisionIDs = new string[i];
                    divisionIDs[i] = reader.GetString(ordinal2);
                }
            }
            string selectedDivisionID = divisionIDs[Div_Selecter.SelectedIndex];
            return selectedDivisionID;

        }
    }
4

3 回答 3

2

divisionIDs在 for 块中声明,因此您无法在该块之外访问它。您正试图在 while 循环之外使用它。如果您需要在循环之外使用该变量,请在 while 循环之前声明它。

于 2013-09-12T16:06:56.643 回答
0

好吧,我认为您不能SqlDataReader像在这里那样再次迭代,

 while (reader.Read())
            {
                int ordinal2 = reader.GetOrdinal("Id");
                for (int i=0; i<=ordinal2; i++)
                {
                    string[] divisionIDs = new string[i];
                    divisionIDs[i] = reader.GetString(ordinal2);
                }
            }

SqlDataReader只是一个 forward ,所以你不能再次迭代它,你可以Dataset用于迭代多次。 MSDN

于 2013-09-12T16:16:38.303 回答
0

问题是您试图在声明的范围之外访问 DivisionID。

string selectedDivisionID = divisionIDs[Div_Selecter.SelectedIndex];

partitionIDs 在while循环内的for循环内声明,您需要在while循环外声明变量,因此范围相同。

于 2013-09-12T16:07:07.787 回答