2016-03-22 1 views
9

Я пытаюсь удалить строку из базы данных на phpAdmin в запросе работает штраф, но когда я исполню ее сMySqlException на ExecuteReader с помощью выбора UserID (PK)

Код:

MySqlCommand getUserID = new MySqlCommand("SELECT UserID FROM User", connection); 

MySqlDataReader reader = getUserID.ExecuteReader(); 

Я получаю

Ошибка:

Destination array is not long enough to copy all the items in the collection. Check array index and length.

I Вставьте пользователя перед удалением пользователя без каких-либо проблем.

База данных имеет UserID со свойствами Unique, Int (длина 9) и Auto-Increment и UserName от типа Char.

Мой вопрос:

Почему я не могу получить userID и как я могу получить его?

Редактировать

Я не могу получить любое целое число или дату только данные VARCHAR.

Вот запрос Создание базы данных: Creation Query

+0

Насколько велик ваши данные? Сколько пользователей в таблице? – Ian

+0

Его маленький стол с 20 знаками – SeeuD1

+1

«не запрос» для выбора? СЕРЬЕЗНО? Вы знаете, что «SELECT» - это запрос для определения? ExecuteNonQuery предназначен для вещей, не возвращающих данные (например, UPDATE, DELETE). – TomTom

ответ

3

Проблемы является база данных MySqlConnection не может получить значение Int или дат, если они не являются беззнаковыми, что также означает исключение:

"Destination array is not long enough to copy all the items in the collection. Check array index and length."

4

Исключение означает, что вы получаете неожиданный результат. Метод ExecuteNonQuery пытается выполнить запрос, который не возвращает строк, и возвращает целое число, отображающее количество строк, отредактированных в базе данных. Поэтому он пытается поместить массив результатов в целое поле, что невозможно.

Чтобы ответить на ваш вопрос, причиной ошибки является запрос. Для выбранных запросов вы должны использовать метод ExecuteReader().

4

Во-первых, так как вы хотите, чтобы получить одно значение (UserID) вы можете использовать ExecuteScalar здесь:

MySqlCommand getUserID = new MySqlCommand("SELECT UserID FROM `User`", connection); 
connection.Open(); 
int userId = (int)getUserID.ExecuteScalar(); 
connection.Close(); 

Во-вторыхUser является reserved keyword, так что вам нужно использовать кавычку вокруг имени таблицы с тем чтобы сделать его явным:

MySqlCommand getUserID = new MySqlCommand("SELECT UserID FROM `User`", connection); 
Смежные вопросы