Использование неназначенной локальной переменной - PullRequest
0 голосов
/ 10 мая 2010
    ...
    ...
    ...

            try
            {
                string Tags_collect;

                SqlDataReader Data1 = cmd.ExecuteReader(); 
                Data1.Read();
                lbl_q_title.Text = Data1["subject"].ToString();

               Data1.NextResult();


               while (Data1.Read())
               {
                   Tags_collect = Data1.GetString(0);
                   Tags_collect= Tags_collect+ Tags_collect;
               }

               lbl_tags.Text = Tags_collect;
    .....
    ....

   ....

не уверен, почему я получаю эту ошибку что мне не хватает?

Ответы [ 5 ]

7 голосов
/ 10 мая 2010

Первый раз, когда вы присваиваете Tags_collect внутри цикла while (Data1.Read()), который не гарантированно будет выполняться.

Исправьте это, инициализируя переменную, когда она объявлена:

string Tags_collect = string.Empty;

Еще лучше, используйте StringBuilder вместо того, чтобы полагаться на повторные конкатенации:

StringBuilder tags = new StringBuilder();
// ...
while (Data1.Read())
{
    string tag = Data1.GetString(0);
    sb.Append(tag);
    sb.Append(",");  // Separator
}
lbl_tags.Text = tags.ToString();

Конкатенация строки к себе в цикле очень неэффективна, потому что строки неизменяемы, поэтому каждая конкатенация создает бренд-новый экземпляр.Использование StringBuilder предотвращает это, используя один буфер.

2 голосов
/ 10 мая 2010

Потому что, если Data1.Read() возвращает false в начале, Tags_collect не назначается.

1 голос
/ 10 мая 2010

Попробуйте это:

string Tags_collect=string.empty;
1 голос
/ 10 мая 2010

вам нужно настроить читатель в цикле while, как этот небольшой пример:

SqlDataReader reader = command.ExecuteReader ();

    // Call Read before accessing data.
    while (reader.Read())
    {
        Console.WriteLine(String.Format("{0}, {1}",
            reader[0], reader[1]));
    }
1 голос
/ 10 мая 2010

Компилятор должен учитывать возможность того, что Data1.Read() в условии цикла while может никогда не вернуть true. Если это произойдет, то Tags_collect никогда не инициализируется, поэтому возникает ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...