2017-04-08 101 views
0

我想用C#得到一個表格的最後一排,但它似乎並沒有工作,這是我的代碼:C#MySQL的順序按返回-1

MySqlConnection cnnGetID = new MySqlConnection(Global.connectionString); 

cmd = "SELECT ContactID FROM Contacten ORDER BY ContactID DESC LIMIT 1"; 
MySqlCommand cmdGetID = new MySqlCommand(cmd, cnnGetID); 

cnnGetID.Open(); 
string contactID = cmdGetID.ExecuteNonQuery().ToString(); 
MessageBox.Show(contactID); 

cnnGetID.Close(); 

的這個返回值爲-1,而應該回到59

奇怪的是的是,當我在phpMyAdmin運行此命令我得到5​​9

爲什麼C#不返回正確的值,但phpMyAdmin是任何想法?

編輯:問題解決了,應該使用ExecuteScalar()。貌似我已經在我的監視器有點太長盯着...

+0

課到這裏學習:讀你仔細調用方法的名稱,並仔細閱讀它們的文檔。 –

+0

http://stackoverflow.com/questions/5349114/executenonquery - 使用ExecuteNonQuery用於更新,插入和刪除查詢。 – Palindromer

回答

1

您需要使用ExecuteScalar而不是ExecuteNonQuery

MySqlConnection cnnGetID = new MySqlConnection(Global.connectionString); 

cmd = "SELECT ContactID FROM Contacten ORDER BY ContactID DESC LIMIT 1"; 
MySqlCommand cmdGetID = new MySqlCommand(cmd, cnnGetID); 

cnnGetID.Open(); 
string contactID = cmdGetID.ExecuteScalar().ToString(); 
MessageBox.Show(contactID); 
cnnGetID.Close(); 

這應該可以解決您的問題。

+0

我不知道我怎麼沒有看到哈哈,看起來我一直在盯着我的顯示器太久了! – user265889

1

你應該使用ExecuteScalar,因爲你是返回值ExecuteNonQuery返回受更新的行數刪除或插入opeation

可以檢查這個更多信息

的ExecuteNonQuery

返回受影響的行數。

的ExecuteScalar

執行查詢,並在 返回第一行的第一列由查詢返回的結果集。其他列或行是 忽略。

以獲取更多信息,您可以檢查此The MySqlCommand Object

+0

您已鏈接到'SqlCommand'文檔 - 這是'MySqlCommand'。這就是爲什麼我鏈接到'IDbCommand.ExecuteNonQuery'。 –

+0

@JonSkeet感謝您的更正先生我已更新鏈接 – Usman

1

這將返回值爲-1,而應該回到59

不,這正好表現由IDbCommand.ExecuteNonQuery的記載:

對於UPDATE,INSERT和DELETE語句,返回值是ro的個數受命令的影響。對於所有其他類型的語句,返回值爲-1。

您使用的是SELECT聲明 - 一個查詢。因此,而不是執行ExecuteNonQuery,你應該使用ExecuteQuery並遍歷結果,或ExecuteScalar,因爲你知道你將有一個結果:

string contactID = cmdGetID.ExecuteScalar().ToString(); 
0

你可以使用這樣的查詢

MySqlConnection cnnGetID = new MySqlConnection(Global.connectionString); 

cmd = "SELECT TOP 1 ContactID FROM Contacten ORDER BY ContactID"; 
MySqlCommand cmdGetID = new MySqlCommand(cmd, cnnGetID); 

cnnGetID.Open(); 
string contactID = cmdGetID.ExecuteNonQuery().ToString(); 
MessageBox.Show(contactID); 

cnnGetID.Close();