2016-03-26 38 views
0

我想要得到的用戶名和用戶ID,但是當我執行命令 我得到異常:MySql的例外選擇AUTO_INCREMENT值C#

指數超出範圍。必須小於集合的大小非負少\ r \ n參數名:的startIndex」

數據庫擁有的項目:用戶ID(自動增加INT(9)(PK))和用戶名(VARCHAR( 20))

代碼:

using (MySqlConnection connection = new MySqlConnection(DBConnection.ConnectionString)) 
{ 
connection.Open(); 
MySqlCommand getUser = new MySqlCommand("SELECT * FROM User Where UserID = '42'", connection); 
MySqlDataReader reader = getUser.ExecuteReader(); 
if (reader.HasRows){ 

唯一的例外是在 「的ExecuteReader」 拋出

隊列

「Select * From User Where UserID = '42'」在服務器上執行沒有任何問題。

我的問題是:

爲什麼我得到一個索引超出範圍的異常?

編輯:

我也試過只查詢

SELECT * FROM用戶在哪裏User

,但我得到了同樣的異常。

我可以插入表中,我可以得到最後一個插入ID,但是當我嘗試每個數據庫與選擇*從XY我得到相同的異常。所有表都與innobDB和所有表至少有一個主鍵或外鍵。

EDIT2:

如果我只能選擇用戶名查詢工作:

選擇用戶名從用戶

但是,當我試圖讓用戶ID

從用戶選擇用戶ID

我得到異常:

{「目標數組不夠長複製集合中的所有項目。檢查數組索引和長度。「} System.Exception {System。ArgumentException的}

+0

嘗試定義命令類型 –

+0

nope我嘗試過類型「text」和「tabledirect」而沒有結果 – SeeuD1

+0

您是否嘗試在查詢中指定列_explicitly_? –

回答

0

嘗試42不帶引號

"SELECT * FROM User Where UserID = 42" 
+0

也沒有任何成功 – SeeuD1

0

也許你的代碼的該編輯可以幫助你。

using (MySqlConnection connection = new MySqlConnection(DBConnection.ConnectionString)) 
{ 
    connection.Open(); 
    MySqlCommand getUser = new MySqlCommand("SELECT * FROM `User` WHERE `User`.`UserID` = 42", connection); 
    MySqlDataReader reader = getUser.ExecuteReader(); 

    //rest of your code 
} 

我希望你能明白。

+0

得到了同樣的錯誤與排隊編輯 – SeeuD1

0

作爲一個明智的錯誤發現過程,我建議檢查錯誤是否位於sql級別。

試圖擺脫where子句的只是執行一個簡單的查詢

SELECT * FROM `User` 

你注意到什麼變化?

+0

但我相信錯誤奠定了你張貼的代碼之外。 –

+0

你可以在'if(reader.HasRows){'之後發佈一些行嗎? –

+0

我試過了,但我得到了同樣的錯誤我刪除了if語句並直接獲取connection.close(),但例外情況是在執行方法中,我可以插入沒有任何問題,我可以得到最後一個插入ID – SeeuD1