2016-03-22 4 views
9

próbuję usunąć wiersz z bazy danych na phpAdmin Query pracuje w porządku, ale kiedy go wykonać z KodeksemMySqlException na ExecuteReader przez Wybór identyfikator użytkownika (PK)

:

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

MySqlDataReader reader = getUserID.ExecuteReader(); 

uzyskać

błąd:

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

I Wstawianie do usunięcia użytkownika bez żadnych problemów.

Baza ma UserID o właściwościach Unique, Int (długość 9) i Auto-Increment i UserName od typu Char.

Moje pytanie brzmi:

Dlaczego nie mogę odbierać userID i jak mogę ją otrzymać?

Edit

nie mogę otrzymać dowolną liczbą całkowitą lub aktualne dane tylko varchar.

Oto zapytanie stworzenie bazy danych: Creation Query

+0

Jak duże jest twoje dane? Ilu użytkowników jest w Tabeli? – Ian

+0

Jest to mały stolik z 20-cioma wartościowymi – SeeuD1

+1

"bez zapytania" dla wybranego? 'POWAŻNIE? Czy wiesz, że "SELECT" jest zapytaniem z definicji? ExecuteNonQuery jest przeznaczony dla rzeczy, które nie zwracają danych (jak UPDATE, DELETE). – TomTom

Odpowiedz

3

Problem jest MySqlConnection Database can not uzyskać wartości int lub datę, jeśli nie są one podpisane, co oznacza, że ​​również wyjątek:

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

4

Wyjątkiem oznacza, że ​​są coraz nieoczekiwany rezultat. Metoda ExecuteNonQuery próbuje wykonać zapytanie, które nie zwraca żadnych wierszy, i zwraca liczbę całkowitą wyświetlającą liczbę wierszy edytowanych w bazie danych. Próbuje więc umieścić tablicę wyników w polu liczb całkowitych, co nie jest możliwe.

Aby odpowiedzieć na pytanie, przyczyną błędu jest zapytanie. W przypadku wybranych zapytań należy użyć metody ExecuteReader().

4

pierwsze ponieważ chcesz pobrać pojedynczą wartość (UserID) można użyć ExecuteScalar tutaj:

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

drugieUser jest reserved keyword, więc trzeba użyć odwrócone, pojedyncze apostrofy wokół nazwy tabeli w celu wyraźnego wyjaśnienia:

MySqlCommand getUserID = new MySqlCommand("SELECT UserID FROM `User`", connection); 
Powiązane problemy