2017-04-08 52 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();