Используя Объект команды SQL, как можно проверить, чтобы видеть, пуст ли набор результатов?

Эта часть:

    for i in range(0,10,1):              
        word.config(text = "Jumbled Word => " + str(jumb_list[i]))

        if guess.get().lower() == user_list[i].lower():
            score += 1
            score_display.config(text = str(score))
            guess.delete(0,END)

Ваш цикл for не будет ждать, пока вы не закончите предположение. Он всегда завершает цикл и конфигурирует ваш word виджет 10 раз, пока он не достигнет последнего. Вы можете избавиться от цикла for и продвинуть индексную базу списка на текущий счет:

def start_game(event):
    timetaken()
    jumb_list = []
    global score
    for i in user_list:
        r1 = sen_jumble(i.split())
        jumb_list.append(r1)
        guess.focus_set()
    word.config(text = "Jumbled Word => " + str(jumb_list[score]))
    if guess.get().lower() == user_list[score].lower():
        score += 1
        score_display.config(text = str(score))
        try:
            word.config(text="Jumbled Word => " + str(jumb_list[score]))
        except IndexError:
            word.config(text="You Win!")
            score = 0
        guess.delete(0,END)
7
задан EverTheLearner 6 April 2009 в 17:40
поделиться

5 ответов

Проверьте определение ExecuteScalar. Это возвращает Объект, который будет иметь нулевую ссылку, если набор результатов будет пуст.

Причина Вы видите нуль, является этим Convert.ToInt32 возвращает нуль при предоставлении null. Необходимо проверить возвращаемое значение от ExecuteScalar перед преобразованием его в int.

12
ответ дан 6 December 2019 в 14:09
поделиться

DbCommand. ExecuteScalar () возвращает первый столбец первой строки или пустой указатель, если результат пуст. Ваша проблема вызывается Преобразованием. ToInt32 (), потому что это возвращается 0 для пустого указателя.

Необходимо проверить значение, возвращенное ExecuteScalar () для пустого, и только звонить, Преобразовывают. ToInt32 (), если это не является пустым.

Object result = command.ExecuteScalar();

if (result != null)
{
   Int32 value = Convert.ToInt32(result);
}
else
{
   // Handle the empty result set case
}
3
ответ дан 6 December 2019 в 14:09
поделиться

Как Вы видите в здесь, можно проверить, является ли результат пустым:

Тип Возвращаемого значения: Система. Возразите первому столбцу первой строки в наборе результатов или нулевой ссылке (Ничто в Visual Basic), если набор результатов пуст.

0
ответ дан 6 December 2019 в 14:09
поделиться

Выполнитесь скаляр возвратит первый столбец первой строки в наборе результатов. Если нет никаких результатов, это должно возвратить пустой указатель.

Мое предположение - то, что Ваша хранимая процедура возвращает количество а не набор данных, который является, почему Вы видите 0.

0
ответ дан 6 December 2019 в 14:09
поделиться

ExecuteScalar возвраты null если набор результатов пуст (как @fallen888, и др. сказали). Причина Вы видите нуль, является этим Convert.ToInt32 возвращает нуль при предоставлении null. Необходимо проверить возвращаемое значение от ExecuteScalar перед преобразованием его в int.

0
ответ дан 6 December 2019 в 14:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: