2016-03-22 8 views
9

provo a cancellare una riga dal database sul phpadmin Query sta lavorando bene, ma quando eseguo con il codiceMySqlException su ExecuteReader da Selezione UserID (PK)

:

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

MySqlDataReader reader = getUserID.ExecuteReader(); 

ottengo l'errore

:

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

I Inserire prima l'utente per eliminare senza problemi.

Database ha un UserID con proprietà Unique, Int (lunghezza 9) e Auto-Increment e un UserName dal tipo Char.

mia domanda è:

Perché non posso ricevere la userID e come posso riceverla?

Modifica

non riesco a ricevere i dati interi o solo data varchar.

Ecco la query di creazione del database: Creation Query

+0

Quanto è grande i vostri dati? Quanti utenti ci sono nella tabella? – Ian

+0

È un tavolo piccolo con valore – SeeuD1

+1

di 20 "non interrogazione" per una selezione? 'SERIAMENTE? Sei consapevole che "SELECT" è una query per definizione? ExecuteNonQuery è pensato per cose che non restituiscono dati (come UPDATE, DELETE). – TomTom

risposta

3

Il problema è la MySqlConnection Database riesco a ottenere i valori Int o la data, se non sono firmati, che significa anche l'eccezione:

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

4

L'eccezione significa che si stanno ottenendo un risultato inaspettato. Il metodo ExecuteNonQuery tenta di eseguire una query che non restituisce righe e restituisce un numero intero che visualizza la quantità di righe modificate nel database. Quindi sta cercando di mettere la matrice di risultati in un campo intero, che non è possibile.

Quindi, per rispondere alla domanda, la causa dell'errore è la query. Per le query selezionate è necessario utilizzare il metodo ExecuteReader().

4

In primo luogo dal momento che si desidera recuperare un singolo valore (UserID) è possibile utilizzare ExecuteScalar qui:

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

In secondo luogoUser è un reserved keyword, quindi è necessario utilizzare backticks intorno nome della tabella per renderlo esplicito:

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