2015-01-23 1 views
1

У меня есть небольшие проблемы с использованием C# выпадающих с MySqlкак изменить положение, начиная выпадающие C# MySQL

Итак, для начала ... У меня есть выпадающий и кнопки на форме. После отправки формы, выполняет MySql запрос типа:

"select * from db1.users where login='"+combobox.SelectedIndex+"')"; 

Он отлично работает, но .... если представить первый элемент выпадающего списка - MySql FOREIGN KEY проблема встречается, (= NULL и так далее).

Любые идеи, как сообщить ему, что первый элемент из combobox не является NULL?

ответ

0

дурацкая идея, но кто знает: Mysql отсчитывает от 1, выпадающий от 0 пытались ли вы:

(selectedIndex + 1) 
0

Вы уверены, что вы хотите не combobox.SelectedItem? Это будет случай, если «login» - это строка в базе данных SQL. Если это целое число, вы пробовали делать combobox.SelectedIndex+1? Это может решить проблему, если «login» начинается с «1» в SQL, в то время как SelectedIndex начинается с 0 на C#.

В любом случае, проверьте ответ ниже, если проблема связана с выделением, не имеющим выбранного элемента. Возможно, у вас может быть форма OnLoad do combobox.SelectedItem=1;

0

Предполагается, что вы говорите о том, чтобы просто отправить кнопку без фактического выбора значения в поле со списком, верно?

Вы должны сделать простой, если перед выполнением вашей команды, как:

if (combobox.SelectedIndex != null) 
{ 
    codethis("select * from db1.users where login='"+combobox.SelectedIndex+"')"); 
} 
else 
{ 
    //do something else 
} 
0

Вы бы хотели прекратить использовать SelectedIndex, потому что он не предназначен для представления ваших данных . Проблема может быть даже не в вашей текущей ситуации (несоответствие между индексацией 1s и 0s). Учитывайте следующее:

  • Еще один разработчик добавляет сортировку к вашей combox. Теперь вместо a,b,c значений являются c,b,a и выбранный индекс 0 будет указывать c вместо a, как она используется, чтобы сделать
  • Кто-то удаляет пользователь в базе данных, поэтому в базе данных вы теперь b,c,d, подумайте о том, что данных, которые вы будете иметь в своем поле со списком?

Для решения этой проблемы вы должны использовать value. Каждое поле со списком должно иметь: отображаемый текст, соответствующее значение (которое скрыто от пользователя) и выбранный индекс. Используя выбранный индекс (или выбранный элемент), вы получаете значение элемента, которое должно быть вашим database_id. Например, см. this answer, если это значение недоступно для вашего типа поля со списком.

Бонусные баллы:

  • использовать параметризацию запросов (предотвращает атаки инъекции SQL)
  • никогда не хранить пароли, а не хранить хэши паролей и случайные соли (read more)